From 257012f6ac2ee95b51eb265ac6991e46b10f82f2 Mon Sep 17 00:00:00 2001 From: Warwick Date: Sun, 23 Nov 2025 21:36:13 +0000 Subject: [PATCH] Added a forced alignment. Shame it makes small allocations bigger but it works for now --- src/arena_allocator.c | 6 ++++-- src/main.c | 5 +++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/arena_allocator.c b/src/arena_allocator.c index 2656040..233d6e2 100644 --- a/src/arena_allocator.c +++ b/src/arena_allocator.c @@ -21,8 +21,8 @@ Arena arena_init(Arena *parent, size_t capacity) { if (parent != NULL) { // Allocate new arena in parent to reduce likelyhood of loss Arena *current_arena = arena_alloc(parent, sizeof(Arena)); - *current_arena = (Arena){ - .begin = region, .end = region, .child = NULL, .sibling = NULL}; + *current_arena = + (Arena){.begin = region, .end = region, .child = NULL, .sibling = NULL}; // if parent has no children this arena is now it's child if (parent->child == NULL) { @@ -66,6 +66,8 @@ void arena_deinit(Arena *arena) { } void *arena_alloc(Arena *arena, size_t size) { + // TODO: only align when needed + size = (size + 7) & ~7; // align size increase to multiple of 8 Region *region = arena->end; assert(region != NULL); diff --git a/src/main.c b/src/main.c index 2f94416..9eeb1ca 100644 --- a/src/main.c +++ b/src/main.c @@ -13,14 +13,14 @@ int main(int argc, char *argv[]) { // arena allocation test - printf("Allocation test"); + printf("Allocation test\n"); Arena global_arena = arena_init(NULL, 0); for (int i = 0; i <= 1048576+100; i++) { int *number = arena_alloc(&global_arena, sizeof(int)); *number = 42; } - printf("children test"); + printf("children test\n"); // arena children test Arena child_arena = arena_init(&global_arena, 0); @@ -29,6 +29,7 @@ int main(int argc, char *argv[]) { arena_deinit(&global_arena); + printf("tests complete\n"); }