From a092599a1af26e657bb93d4e8757aea8c6e0964b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nils=20O=2E=20Sel=C3=A5sdal?= Date: Tue, 9 Jun 2026 10:41:51 +0200 Subject: [PATCH] Some comments --- src/arena.c | 1 + src/arena.h | 16 +++++++--------- src/main.c | 14 ++++++++++---- src/platform.c | 10 +++++----- 4 files changed, 23 insertions(+), 18 deletions(-) diff --git a/src/arena.c b/src/arena.c index 59d2e77..aac70a2 100644 --- a/src/arena.c +++ b/src/arena.c @@ -109,6 +109,7 @@ void arena_pop_to(Arena *arena, U32 abs_pos) } else { U32 new_pos = abs_pos - block->base_pos; new_pos = Max(MemoryBlock_Header_Size, new_pos); + // Disallow arbirary pops to positions that previously were not commited. Assert(new_pos <= block->committed_pos); block->pos = new_pos; ASAN_POISON_MEMORY_REGION(&block->base[block->pos], memoryblock_available(block)); diff --git a/src/arena.h b/src/arena.h index cdbf6ab..9e9e971 100644 --- a/src/arena.h +++ b/src/arena.h @@ -14,18 +14,19 @@ struct ArenaParams { typedef struct MemoryBlock MemoryBlock; struct MemoryBlock { U8 *base; - U32 size; - U32 pos; // start of next allocation - U32 base_pos; // absolute position of base relative to the first linked arena - U32 committed_pos; + U32 size; // Block size, page aligned + U32 pos; // start of next allocation + U32 base_pos; // absolute position of base relative to the first linked arena + U32 committed_pos; // end of committed region. Will be page aligned MemoryBlock *prev; }; typedef struct Arena Arena; struct Arena { MemoryBlock *current; - U32 block_size; - U32 commit_size; + U32 block_size; // requested block size + U32 commit_size; // requested commit size + U32 page_size; // cached page size ArenaFlags flags; S32 checkpoint_level; }; @@ -39,10 +40,7 @@ struct ArenaCheckPoint { StaticAssert(sizeof(MemoryBlock) <= 64); #define MemoryBlock_Header_Size 64u - - void arena_init(Arena *arena, const ArenaParams *params); - void arena_free(Arena *arena); void *arena_push(Arena *arena, U32 size, U32 align); diff --git a/src/main.c b/src/main.c index 41de530..dfdbb9d 100644 --- a/src/main.c +++ b/src/main.c @@ -21,6 +21,7 @@ void arena_dump(const Arena *arena) } static void arena_test_1(void) { + TRACEF("\n"); ArenaParams arena_params = {}; U32 arena_size = MB(1) + MemoryBlock_Header_Size; U32 commit_size = KB(8); @@ -47,6 +48,8 @@ static void arena_test_1(void) static void arena_test_2(void) { + TRACEF("\n"); + ArenaParams arena_params = {}; U32 arena_size = MB(1) + MemoryBlock_Header_Size; U32 commit_size = KB(16); @@ -89,15 +92,18 @@ static void arena_test_2(void) arena_pop_to(&arena, 1089); arena_dump(&arena); arena_pop_to(&arena, 0); - + ptr = arena_push(&arena, MB(1), 8); + MemoryZero(ptr, MB(1)); arena_free(&arena); } static void arena_test_3(void) { + TRACEF("\n"); + ArenaParams arena_params = {}; U32 arena_size = KB(97) + MemoryBlock_Header_Size; - U32 commit_size = KB(32); + U32 commit_size = KB(97); arena_params.size = arena_size; arena_params.commit_size = commit_size; Arena arena; @@ -116,7 +122,7 @@ static void arena_test_3(void) int main(int argc, char *argv[]) { - //arena_test_1(); - //arena_test_2(); + arena_test_1(); + arena_test_2(); arena_test_3(); } diff --git a/src/platform.c b/src/platform.c index f8198db..654fe05 100644 --- a/src/platform.c +++ b/src/platform.c @@ -30,7 +30,7 @@ void *memory_allocate(size_t size) Assert(IsPow2(size)); void *mem = mmap(0, size, PROT_READ | PROT_WRITE, MAP_ANONYMOUS | MAP_PRIVATE, -1, 0); - TRACEF("memory_allocate size=%zu mem=%p\n", size, mem); + TRACEF("memory_allocate size=%7zu mem=%p\n", size, mem); if (mem == MAP_FAILED) { mem = NULL; } @@ -39,7 +39,7 @@ void *memory_allocate(size_t size) void memory_free(void *mem, size_t size) { - TRACEF(" memory_free size=%zu mem=%p\n", size, mem); + TRACEF(" memory_free size=%7zu mem=%p\n", size, mem); Assert(IsPageAligned((uintptr_t)mem)); Assert(IsPageAligned(size)); int rc = munmap(mem, size); @@ -51,7 +51,7 @@ void *memory_reserve(size_t size) { Assert(IsPageAligned(size)); void *mem = mmap(0, size, PROT_NONE, MAP_ANONYMOUS | MAP_PRIVATE, -1, 0); - TRACEF("memory_reserve size=%zu mem=%p\n", size, mem); + TRACEF("memory_reserve size=%7zu mem=%p\n", size, mem); if (mem == MAP_FAILED) { mem = NULL; } @@ -62,7 +62,7 @@ void memory_commit(void *mem, size_t size) { Assert(IsPageAligned((uintptr_t)mem)); Assert(IsPageAligned(size)); - TRACEF("memory_commit size=%zu mem=%p\n", size, mem); + TRACEF("memory_commit size=%7zu mem=%p\n", size, mem); int rc; rc = mprotect(mem, size, PROT_READ | PROT_WRITE); @@ -73,7 +73,7 @@ void memory_commit(void *mem, size_t size) void memory_decommit(void *mem, size_t size) { - TRACEF("memory_decommit size=%zu mem=%p\n", size, mem); + TRACEF("memory_decommit size=%7zu mem=%p\n", size, mem); Assert(IsPageAligned((uintptr_t)mem)); Assert(IsPageAligned(size)); int rc;