#include "base_core.h" #include "arena.h" #include #include void arena_dump(const Arena *arena) { return; MemoryBlock *block = arena->current; puts("@@@@@@@@@@"); while (block) { puts("-----Arena-----"); printf("base: %p\n", block->base); printf("size: %u\n", block->size); printf("pos: %u\n", block->pos); printf("base_pos: %u\n", block->base_pos); printf("prev: %p\n", block->prev); puts("-----Arena end-"); block = block->prev; } } static void arena_test_1(void) { ArenaParams arena_params = {}; U32 arena_size = MB(1) + MemoryBlock_Header_Size; U32 commit_size = KB(8); arena_params.size = arena_size; arena_params.commit_size = commit_size; Arena arena; arena_init(&arena, &arena_params); arena_dump(&arena); void *ptr = arena_push(&arena, 512, 1); MemoryZero(ptr, 512); printf("Allocated ptr %p\n", ptr); arena_dump(&arena); ptr = arena_push(&arena, 512, 1); MemoryZero(ptr, 512); printf("Allocated ptr %p\n", ptr); arena_dump(&arena); ptr = arena_push(&arena, 1, 1); MemoryZero(ptr, 1); printf("Allocated ptr %p\n", ptr); arena_dump(&arena); arena_free(&arena); } static void arena_test_2(void) { ArenaParams arena_params = {}; U32 arena_size = MB(1) + MemoryBlock_Header_Size; U32 commit_size = KB(16); U32 push_size = KB(32); arena_params.size = arena_size; arena_params.commit_size = commit_size; Arena arena; arena_init(&arena, &arena_params); void *ptr; ptr = arena_push(&arena, push_size, 8); MemoryZero(ptr, push_size); printf("Allocated ptr %p\n", ptr); arena_dump(&arena); ArenaCheckPoint checkpoint = arena_temp_begin(&arena); ptr = arena_push(&arena, MB(2), 8); MemoryZero(ptr, MB(2)); ptr = arena_push(&arena, commit_size * 3, 8); MemoryZero(ptr, commit_size * 3 ); ptr = arena_push(&arena, commit_size , 8); MemoryZero(ptr, commit_size ); ArenaCheckPoint checkpoint2 = arena_temp_begin(&arena); ptr = arena_push(&arena, 64, 8); MemoryZero(ptr, 64); arena_temp_end(&checkpoint2); arena_temp_end(&checkpoint); arena_pop_to(&arena, 1088); arena_dump(&arena); ptr = arena_push(&arena, 1, KB(16)); ((U8*)ptr)[0] = 0x37; ptr = arena_push(&arena, 1, KB(16)); ((U8*)ptr)[0] = 0x73; ptr = arena_push(&arena, 0, KB(4)); //((U8*)ptr)[0] = 0x73; arena_pop_to(&arena, 1089); arena_dump(&arena); arena_pop_to(&arena, 0); arena_free(&arena); } static void arena_test_3(void) { ArenaParams arena_params = {}; U32 arena_size = KB(97) + MemoryBlock_Header_Size; U32 commit_size = KB(32); arena_params.size = arena_size; arena_params.commit_size = commit_size; Arena arena; arena_init(&arena, &arena_params); arena_dump(&arena); void *ptr = arena_push(&arena, KB(64), 32); MemoryZero(ptr, KB(64)); printf("Allocated ptr %p\n", ptr); arena_dump(&arena); ptr = arena_push(&arena, KB(97) - KB(64), 32); MemoryZero(ptr, KB(97) - KB(64)); printf("Allocated ptr %p\n", ptr); arena_dump(&arena); arena_free(&arena); } int main(int argc, char *argv[]) { //arena_test_1(); //arena_test_2(); arena_test_3(); }