1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- #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);
- }
|