From f89166f22385df5ca69b284059856325c7f2ca29 Mon Sep 17 00:00:00 2001 From: ougi Date: Sat, 23 Mar 2024 17:59:22 -0300 Subject: [PATCH] improve arena allocator behaviour previous commit also optimized the allocation of an arena struct --- lib/arena.h | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/lib/arena.h b/lib/arena.h index 8b24700..bf5d1e5 100755 --- a/lib/arena.h +++ b/lib/arena.h @@ -87,16 +87,16 @@ static inline void *ArenaPush(Arena *arena, size_t bytes) { if (arena->pos + bytes > arena->size) { /* need more memory! (make growable arena linked list) */ - if (bytes > arena->size * ARENA_GROWTH_FACTOR) { - fprintf( - stderr, "FATAL: requested block won't fit in a single arena!" - " (Block: %zuB, Arena: %zuB)\n", bytes, arena->size - ); - exit(-1); - } - if (!arena->next) { size_t newSize = arena->size * ARENA_GROWTH_FACTOR; + if (bytes > newSize) { + fprintf( + stderr, + "FATAL: requested block won't fit in a single arena!" + " (Block: %zuB, Arena: %zuB)\n", bytes, arena->size + ); + exit(EXIT_FAILURE); + } #ifdef INSTRUMENTATION printf(" ALLOCATING: new arena of %zuB...\n\n", newSize); #endif