diff --git a/src/arena.c b/src/arena.c index 367c780..fecfe81 100644 --- a/src/arena.c +++ b/src/arena.c @@ -25,7 +25,7 @@ MemoryBlock *memoryblock_allocate(size_t size, size_t commit_size) void arena_init(Arena *arena, const ArenaParams *params) { Assert(params->size > MemoryBlock_Header_Size); - Assert(params->size < (U32_Max - platform_page_size())); // keep last page for overflow detection + Assert(params->size < (U32_Max - Max(params->commit_size, platform_page_size()))); // Reserving last piece so our math doesn't overflow Assert(IsPow2(params->commit_size)); MemoryBlock *block = memoryblock_allocate(params->size, params->commit_size); @@ -83,8 +83,8 @@ void *arena_push(Arena *arena, U32 size, U32 align) if (block->committed_pos < end_pos) { // Commit more memory U32 aligned_end_pos = AlignToPageEnd(start_pos + size); - U32 aligned_size = RoundUpToMultiple(aligned_end_pos - block->committed_pos, arena->commit_size); + memory_commit(&block->base[block->committed_pos], aligned_size); block->committed_pos += aligned_size; } diff --git a/src/main.c b/src/main.c index 54c6623..3f9c7fc 100644 --- a/src/main.c +++ b/src/main.c @@ -83,8 +83,8 @@ static void arena_test_2(void) ((U8*)ptr)[0] = 0x37; ptr = arena_push(&arena, 1, KB(16)); ((U8*)ptr)[0] = 0x73; - ptr = arena_push(&arena, 1, KB(4)); - ((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); diff --git a/src/platform.h b/src/platform.h index 0c18d06..8cc3d4e 100644 --- a/src/platform.h +++ b/src/platform.h @@ -12,18 +12,18 @@ void memory_decommit(void *mem, size_t size); void memory_free(void *mem, size_t size); -static INLINE size_t AlignToPageEnd(size_t size) +static INLINE size_t AlignToPageEnd(size_t value) { U32 page_size = platform_page_size(); - size_t aligned_size = AlignUpPow2(size, page_size); + size_t aligned_value = AlignUpPow2(value, page_size); - return aligned_size; + return aligned_value; } -static INLINE size_t AlignToPageStart(size_t size) +static INLINE size_t AlignToPageStart(size_t value) { U32 page_size = platform_page_size(); - size_t aligned_size = AlignDownPow2(size, page_size); + size_t aligned_value= AlignDownPow2(value, page_size); - return aligned_size; + return aligned_value; }