From 4cc6fce555a78294a792c69eb35ad75b2e731cce Mon Sep 17 00:00:00 2001 From: rhuibertsjr Date: Fri, 26 Apr 2024 17:23:37 +0200 Subject: [PATCH] Added: simple memory alignment mechanism --- src/arena.c | 8 +++++--- src/arena.h | 3 ++- src/base.h | 2 ++ 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/arena.c b/src/arena.c index cddf55a..ba2af47 100644 --- a/src/arena.c +++ b/src/arena.c @@ -37,8 +37,9 @@ internal void * arena_allocate(Arena *arena, u64 size) { Arena *current = arena->current; - u64 pos_mem = current->offset; - u64 pos_new = current->offset + size; + u64 pos_mem = + memory_align_power_of_two(current->offset, ARENA_DEFAULT_ALIGNMENT); + u64 pos_new = current->offset + size; if (current->size < pos_new && current->growable) { @@ -58,7 +59,8 @@ arena_allocate(Arena *arena, u64 size) sll_stack_push(arena->current, new_memory_bock, prev); current = new_memory_bock; - pos_mem = current->offset; + pos_mem = + memory_align_power_of_two(current->offset, ARENA_DEFAULT_ALIGNMENT); pos_new = current->offset + size; } diff --git a/src/arena.h b/src/arena.h index 547b837..d09a304 100644 --- a/src/arena.h +++ b/src/arena.h @@ -2,6 +2,7 @@ #define ARENA_H #define ARENA_INITIAL_COMMIT_SIZE sizeof(struct Arena) +#define ARENA_DEFAULT_ALIGNMENT 8 #ifndef ARENA_DEFAULT_RESERVE_SIZE # define ARENA_DEFAULT_RESERVE_SIZE KB(4) @@ -19,7 +20,7 @@ struct Arena { }; STATIC_ASSERT(ARENA_INITIAL_COMMIT_SIZE <= ARENA_DEFAULT_RESERVE_SIZE, - arena_default_allocation_size); + arena_default_allocation_size); //= rhjr: arenas diff --git a/src/base.h b/src/base.h index db6336e..4956525 100644 --- a/src/base.h +++ b/src/base.h @@ -39,6 +39,8 @@ typedef uint8_t b64; //= rhjr: memory helpers +#define memory_align_power_of_two(x,b) (((x) + (b) - 1)&(~((b) - 1))) + #define memory_zero(s,z) memset((s), 0, (z)) #define memory_zero_struct(s) memory_zero((s), sizeof(*(s)))