From e9451f10f86d347c2b62d177ad57c86326f11730 Mon Sep 17 00:00:00 2001 From: Abdelrahman Date: Sun, 6 Oct 2024 12:42:12 +0100 Subject: [PATCH] Reformat and increase minimum arena capacity to 4 pages --- src/core/mem/arena/mem_arena.c | 24 ++++++-------------- src/core/mem/arena/mem_arena.h | 29 ++++-------------------- src/core/mem/arena/mem_arena_allocator.h | 26 ++++----------------- src/core/mem/libc/mem_libc_allocator.h | 1 + tests/arena/test_arena.c | 2 +- 5 files changed, 19 insertions(+), 63 deletions(-) diff --git a/src/core/mem/arena/mem_arena.c b/src/core/mem/arena/mem_arena.c index 961f96e..5e6da30 100644 --- a/src/core/mem/arena/mem_arena.c +++ b/src/core/mem/arena/mem_arena.c @@ -1,5 +1,6 @@ #include "mem_arena.h" #include "aliases.h" +#include "misc_utils.h" #include "mem_utils.h" #include #include @@ -11,7 +12,7 @@ #define DEFAULT_ALIGNMENT (2 * sizeof(void *)) #endif /* ifndef DEFAULT_ALIGNMENT */ -#define ARENA_MINIMUM_CAPACITY 1024 +#define ARENA_MINIMUM_CAPACITY KB(16) // Allocate minimum of 4 pages struct arena { u8 *buf; @@ -20,19 +21,11 @@ struct arena { bool committed; #ifdef WAPP_PLATFORM_WINDOWS - #include "misc_utils.h" wapp_misc_utils_padding_size(sizeof(u8 *) * 2 + sizeof(u64) + sizeof(bool)); #endif // ifdef WAPP_PLATFORM_WINDOWS }; -/***************************************************************************/ // -//////////////////////////////////////////////////////////////////////////////// -////// Arena API definitions -//////////////////////////////////////////////////////////////////////////////// -/***************************************************************************/ // - -bool wapp_mem_arena_init_custom(Arena **arena, u64 base_capacity, - MemAllocFlags flags, bool zero_buffer) { +bool wapp_mem_arena_init_custom(Arena **arena, u64 base_capacity, MemAllocFlags flags, bool zero_buffer) { if (!arena || *arena || base_capacity == 0) { return false; } @@ -43,9 +36,7 @@ bool wapp_mem_arena_init_custom(Arena **arena, u64 base_capacity, return false; } - u64 arena_capacity = base_capacity >= ARENA_MINIMUM_CAPACITY - ? base_capacity - : ARENA_MINIMUM_CAPACITY; + u64 arena_capacity = base_capacity >= ARENA_MINIMUM_CAPACITY ? base_capacity : ARENA_MINIMUM_CAPACITY; arena_ptr->buf = (u8 *)wapp_mem_util_alloc(NULL, arena_capacity, WAPP_MEM_ACCESS_READ_WRITE, flags, zero_buffer ? WAPP_MEM_INIT_INITIALISED : WAPP_MEM_INIT_UNINITIALISED); @@ -82,10 +73,9 @@ void *wapp_mem_arena_alloc_aligned(Arena *arena, u64 size, u64 alignment) { #ifdef WAPP_PLATFORM_WINDOWS if (!(arena->committed)) { - output = (u8 *)wapp_mem_util_alloc( - alloc_start, (uptr)(arena->offset) - (uptr)(alloc_start), - WAPP_MEM_ACCESS_READ_WRITE, WAPP_MEM_ALLOC_COMMIT, - WAPP_MEM_INIT_INITIALISED); + output = (u8 *)wapp_mem_util_alloc(alloc_start, (uptr)(arena->offset) - (uptr)(alloc_start), + WAPP_MEM_ACCESS_READ_WRITE, WAPP_MEM_ALLOC_COMMIT, + WAPP_MEM_INIT_INITIALISED); } #else memset(output, 0, size); diff --git a/src/core/mem/arena/mem_arena.h b/src/core/mem/arena/mem_arena.h index 8bccabc..d35c994 100644 --- a/src/core/mem/arena/mem_arena.h +++ b/src/core/mem/arena/mem_arena.h @@ -11,40 +11,21 @@ BEGIN_C_LINKAGE typedef struct arena Arena; -/***************************************************************************/ // -//////////////////////////////////////////////////////////////////////////////// -////// Arena wrapper macros -//////////////////////////////////////////////////////////////////////////////// -/***************************************************************************/ // - #define wapp_mem_arena_init(arena_dptr, base_capacity) \ - (wapp_mem_arena_init_custom(arena_dptr, base_capacity, \ - WAPP_MEM_ALLOC_RESERVE, false)) + (wapp_mem_arena_init_custom(arena_dptr, base_capacity, WAPP_MEM_ALLOC_RESERVE, false)) #define wapp_mem_arena_init_commit(arena_dptr, base_capacity) \ - (wapp_mem_arena_init_custom(arena_dptr, base_capacity, \ - WAPP_MEM_ALLOC_RESERVE | WAPP_MEM_ALLOC_COMMIT, \ - false)) + (wapp_mem_arena_init_custom(arena_dptr, base_capacity, WAPP_MEM_ALLOC_RESERVE | WAPP_MEM_ALLOC_COMMIT, false)) #define wapp_mem_arena_init_zero(arena_dptr, base_capacity) \ - (wapp_mem_arena_init_custom(arena_dptr, base_capacity, \ - WAPP_MEM_ALLOC_RESERVE, true)) + (wapp_mem_arena_init_custom(arena_dptr, base_capacity, WAPP_MEM_ALLOC_RESERVE, true)) #define wapp_mem_arena_init_commit_and_zero(arena_dptr, base_capacity) \ - (wapp_mem_arena_init_custom(arena_dptr, base_capacity, \ - WAPP_MEM_ALLOC_RESERVE | WAPP_MEM_ALLOC_COMMIT, \ - true)) - -/***************************************************************************/ // -//////////////////////////////////////////////////////////////////////////////// -////// Arena API declarations -//////////////////////////////////////////////////////////////////////////////// -/***************************************************************************/ // + (wapp_mem_arena_init_custom(arena_dptr, base_capacity, WAPP_MEM_ALLOC_RESERVE | WAPP_MEM_ALLOC_COMMIT, true)) /** * Arena initialisation function. `wapp_mem_arena_init_custom` provides the most * control over how the Arena is initialised. Wrapper macros are provided for * easier use. */ -bool wapp_mem_arena_init_custom(Arena **arena, u64 base_capacity, - MemAllocFlags flags, bool zero_buffer); +bool wapp_mem_arena_init_custom(Arena **arena, u64 base_capacity, MemAllocFlags flags, bool zero_buffer); void *wapp_mem_arena_alloc(Arena *arena, u64 size); void *wapp_mem_arena_alloc_aligned(Arena *arena, u64 size, u64 alignment); void *wapp_mem_arena_realloc(Arena *arena, void *ptr, u64 old_size, u64 new_size); diff --git a/src/core/mem/arena/mem_arena_allocator.h b/src/core/mem/arena/mem_arena_allocator.h index 511f04d..8350bc6 100644 --- a/src/core/mem/arena/mem_arena_allocator.h +++ b/src/core/mem/arena/mem_arena_allocator.h @@ -2,38 +2,22 @@ #define MEM_ARENA_ALLOCATOR_H #include "aliases.h" -#include "mem_allocator.h" #include "mem_utils.h" +#include "mem_allocator.h" #include #ifdef __cplusplus BEGIN_C_LINKAGE #endif // __cplusplus -/***************************************************************************/ // -//////////////////////////////////////////////////////////////////////////////// -////// Arena Allocator wrapper macros -//////////////////////////////////////////////////////////////////////////////// -/***************************************************************************/ // - #define wapp_mem_arena_allocator_init(base_capacity) \ - (wapp_mem_arena_allocator_init_custom(base_capacity, WAPP_MEM_ALLOC_RESERVE, \ - false)) + (wapp_mem_arena_allocator_init_custom(base_capacity, WAPP_MEM_ALLOC_RESERVE, false)) #define wapp_mem_arena_allocator_init_commit(base_capacity) \ - (wapp_mem_arena_allocator_init_custom( \ - base_capacity, WAPP_MEM_ALLOC_RESERVE | WAPP_MEM_ALLOC_COMMIT, false)) + (wapp_mem_arena_allocator_init_custom(base_capacity, WAPP_MEM_ALLOC_RESERVE | WAPP_MEM_ALLOC_COMMIT, false)) #define wapp_mem_arena_allocator_init_zero(base_capacity) \ - (wapp_mem_arena_allocator_init_custom(base_capacity, WAPP_MEM_ALLOC_RESERVE, \ - true)) + (wapp_mem_arena_allocator_init_custom(base_capacity, WAPP_MEM_ALLOC_RESERVE, true)) #define wapp_mem_arena_allocator_init_commit_and_zero(base_capacity) \ - (wapp_mem_arena_allocator_init_custom( \ - base_capacity, WAPP_MEM_ALLOC_RESERVE | WAPP_MEM_ALLOC_COMMIT, true)) - -/***************************************************************************/ // -//////////////////////////////////////////////////////////////////////////////// -////// Arena Allocator API declarations -//////////////////////////////////////////////////////////////////////////////// -/***************************************************************************/ // + (wapp_mem_arena_allocator_init_custom(base_capacity, WAPP_MEM_ALLOC_RESERVE | WAPP_MEM_ALLOC_COMMIT, true)) /** * Wraps an Arena in an Allocator object. It attempts to initialise the Arena diff --git a/src/core/mem/libc/mem_libc_allocator.h b/src/core/mem/libc/mem_libc_allocator.h index 5b66539..0c0491e 100644 --- a/src/core/mem/libc/mem_libc_allocator.h +++ b/src/core/mem/libc/mem_libc_allocator.h @@ -2,6 +2,7 @@ #define MEM_LIBC_H #include "mem_allocator.h" + #ifdef __cplusplus BEGIN_C_LINKAGE #endif // __cplusplus diff --git a/tests/arena/test_arena.c b/tests/arena/test_arena.c index aba9d3d..5e12284 100644 --- a/tests/arena/test_arena.c +++ b/tests/arena/test_arena.c @@ -6,7 +6,7 @@ #include #include -#define ARENA_CAPACITY 1024 +#define ARENA_CAPACITY KB(16) internal Arena *arena = NULL; internal i32 count = 20;