server-skynet-source-3rd-je.../test/stress/fill_flush.c
2020-05-16 13:34:23 -07:00

77 lines
1.8 KiB
C

#include "test/jemalloc_test.h"
#include "test/bench.h"
#define SMALL_ALLOC_SIZE 128
#define LARGE_ALLOC_SIZE SC_LARGE_MINCLASS
#define NALLOCS 1000
/*
* We make this volatile so the 1-at-a-time variants can't leave the allocation
* in a register, just to try to get the cache behavior closer.
*/
void *volatile allocs[NALLOCS];
static void
array_alloc_dalloc_small(void) {
for (int i = 0; i < NALLOCS; i++) {
void *p = mallocx(SMALL_ALLOC_SIZE, 0);
assert_ptr_not_null(p, "mallocx shouldn't fail");
allocs[i] = p;
}
for (int i = 0; i < NALLOCS; i++) {
sdallocx(allocs[i], SMALL_ALLOC_SIZE, 0);
}
}
static void
item_alloc_dalloc_small(void) {
for (int i = 0; i < NALLOCS; i++) {
void *p = mallocx(SMALL_ALLOC_SIZE, 0);
assert_ptr_not_null(p, "mallocx shouldn't fail");
allocs[i] = p;
sdallocx(allocs[i], SMALL_ALLOC_SIZE, 0);
}
}
TEST_BEGIN(test_array_vs_item_small) {
compare_funcs(1 * 1000, 10 * 1000,
"array of small allocations", array_alloc_dalloc_small,
"small item allocation", item_alloc_dalloc_small);
}
TEST_END
static void
array_alloc_dalloc_large(void) {
for (int i = 0; i < NALLOCS; i++) {
void *p = mallocx(LARGE_ALLOC_SIZE, 0);
assert_ptr_not_null(p, "mallocx shouldn't fail");
allocs[i] = p;
}
for (int i = 0; i < NALLOCS; i++) {
sdallocx(allocs[i], LARGE_ALLOC_SIZE, 0);
}
}
static void
item_alloc_dalloc_large(void) {
for (int i = 0; i < NALLOCS; i++) {
void *p = mallocx(LARGE_ALLOC_SIZE, 0);
assert_ptr_not_null(p, "mallocx shouldn't fail");
allocs[i] = p;
sdallocx(allocs[i], LARGE_ALLOC_SIZE, 0);
}
}
TEST_BEGIN(test_array_vs_item_large) {
compare_funcs(100, 1000,
"array of large allocations", array_alloc_dalloc_large,
"large item allocation", item_alloc_dalloc_large);
}
TEST_END
int main(void) {
return test_no_reentrancy(
test_array_vs_item_small,
test_array_vs_item_large);
}