#include #include #include #include "lalloc.h" void debug_alloc(const LAlloc *allocator) { puts("--debug start--"); for (LBlockHeader *b = allocator->heap_start; b; b = lblock_from_offset(allocator, b->next)) { printf("Block size %u free %d prev %u next %u \n", lblock_size(b), lblock_is_free(b), b->prev, b->next); } puts("--debug end--"); } [[gnu::aligned(16)]] char buff[1023]; int main(void) { printf("bh size %zu\n", sizeof(LBlockHeader)); #define SZ 64 LAlloc a; char *ptrs[SZ]; lalloc_init(&a, buff, sizeof(buff)); debug_alloc(&a); ptrs[0] = lalloc(&a, 1023 - 16 * 2 - 144); ptrs[1] = lalloc(&a, 80); ptrs[2] = lalloc(&a, 32); debug_alloc(&a); lfree(&a, ptrs[0]); ptrs[3] = lalloc(&a, 12); ptrs[4] = lalloc(&a, 12); debug_alloc(&a); lfree(&a, ptrs[1]); lfree(&a, ptrs[2]); lfree(&a, ptrs[3]); lfree(&a, ptrs[4]); for (int i = 0; i < SZ; i++) { ptrs[i] = lalloc(&a, rand() % 256 + 1); } for (int i = 0; i < SZ; i++) { // if (rand() % 2 == 0) { lfree(&a, ptrs[i]); // } } debug_alloc(&a); }