int main() { srand(time(0)); struct slab_arena arena; struct slab_cache cache; slab_arena_create(&arena, 0, UINT_MAX, 4000000, MAP_PRIVATE); slab_cache_create(&cache, &arena, 0); int i = 0; while (i < ITERATIONS) { int run = random() % NRUNS; int size = random() % MAX_ALLOC; if (runs[run]) { slab_put(&cache, runs[run]); } runs[run] = slab_get(&cache, size); fail_unless(runs[run]); slab_cache_check(&cache); i++; } slab_cache_destroy(&cache); }
static void ts_free(void) { ts_options_free(&tss.opts); ts_space_free(&tss.s); ts_reftable_free(&tss.rt); region_free(&tss.ra); slab_cache_destroy(&tss.sc); }
int main() { quota_init("a, UINT_MAX); slab_arena_create(&arena, "a, 0, 4000000, MAP_PRIVATE); slab_cache_create(&cache, &arena); region_basic(); region_test_truncate(); slab_cache_destroy(&cache); }
int main() { seed = time(0); srand(seed); quota_init("a, UINT_MAX); slab_arena_create(&arena, "a, 0, 4000000, MAP_PRIVATE); slab_cache_create(&cache, &arena); small_alloc_basic(); slab_cache_destroy(&cache); }
int main() { seed = time(0); srand(seed); objsize = rand() % OBJSIZE_MAX; if (objsize < OBJSIZE_MIN) objsize = OBJSIZE_MIN; slab_arena_create(&arena, 0, UINT_MAX, 4000000, MAP_PRIVATE); slab_cache_create(&cache, &arena, 0); mempool_basic(); slab_cache_destroy(&cache); }
int main() { struct slab_cache cache; struct slab_arena arena; struct quota quota; seed = time(0); srand(seed); quota_init("a, UINT_MAX); slab_arena_create(&arena, "a, 0, 4000000, MAP_PRIVATE); slab_cache_create(&cache, &arena); obuf_basic(&cache); slab_cache_destroy(&cache); }
int main(int argc, char *argv[]) { plan(4); // 1. Create slab cache srand(time(0)); const unsigned pattern = 0xdeadbeef; slab_cache_t cache; int ret = slab_cache_init(&cache, sizeof(int)); is_int(0, ret, "slab: created empty cache"); // 2. Couple alloc/free bool valid_free = true; for(int i = 0; i < 100; ++i) { int* data = (int*)slab_cache_alloc(&cache); *data = pattern; slab_free(data); if (*data == pattern) valid_free = false; } // 5. Verify freed block ok(valid_free, "slab: freed memory is correctly invalidated"); // 4. Reap memory slab_t* slab = cache.slabs_free; int free_count = 0; while (slab) { slab_t* next = slab->next; if (slab_isempty(slab)) { ++free_count; } slab = next; } int reaped = slab_cache_reap(&cache); is_int(reaped, free_count, "slab: cache reaping works"); // Stress cache int alloc_count = 73521; void** ptrs = alloca(alloc_count * sizeof(void*)); int ptrs_i = 0; for(int i = 0; i < alloc_count; ++i) { double roll = rand() / (double) RAND_MAX; if ((ptrs_i == 0) || (roll < 0.6)) { int id = ptrs_i++; ptrs[id] = slab_cache_alloc(&cache); if (ptrs[id] == 0) { ptrs_i--; } else { int* data = (int*)ptrs[id]; *data = pattern; } } else { slab_free(ptrs[--ptrs_i]); } } // 5. Delete cache slab_cache_destroy(&cache); is_int(0, cache.bufsize, "slab: freed cache"); return 0; }