diff --git a/library/arena.h b/library/arena.h index db82124..401fd7f 100644 --- a/library/arena.h +++ b/library/arena.h @@ -35,6 +35,7 @@ extern void * arena_allocate(size_t size); #endif #ifdef ARENA_IMPLEMENTATION +#define arena_block_allocation_size (13) //~typedef struct { //~char * buffer; @@ -70,6 +71,8 @@ arena_block * arena_init(size_t limit) { //~*(arena->block_array[arena->block_count - 1]) = calloc(1, sizeof (arena_block)); arena->block_array[arena->block_count - 1]->buffer = calloc(limit, 1); + arena->block_array[arena->block_count - 1]->count = 0; + arena->block_array[arena->block_count - 1]->capacity = limit; return block; } @@ -99,12 +102,15 @@ void * arena_allocate(size_t size) { atexit(arena_deinit); open_arena = 1; arena = calloc(1, sizeof(*arena)); - } - - if (arena->block_count == 0) { arena->block_count++; arena->block_array = realloc(arena->block_array, arena->block_count * sizeof(*arena->block_array)); - arena->block_array[arena->block_count - 1] = arena_init(13); + arena->block_array[arena->block_count - 1] = arena_init(arena_block_allocation_size); + } + + if (arena->block_array[arena->block_count - 1]->count + size >= arena->block_array[arena->block_count - 1]->capacity) { + arena->block_count++; + arena->block_array = realloc(arena->block_array, arena->block_count * sizeof(*arena->block_array)); + arena->block_array[arena->block_count - 1] = arena_init(arena_block_allocation_size); } size_t spot = arena->block_array[arena->block_count - 1]->count; diff --git a/library/test b/library/test index 9589ec0..65a9ba8 100755 Binary files a/library/test and b/library/test differ diff --git a/library/test.c b/library/test.c index 6d64749..2a8a65e 100644 --- a/library/test.c +++ b/library/test.c @@ -7,9 +7,31 @@ int main (void) { a = arena_allocate (12); strcpy(a, "Heyo world\n"); printf("%s", a); + char * b; b = arena_allocate (6); strcpy(b, "Heyo\n"); printf("%s", b); + + char * c; + c = arena_allocate (6); + strcpy(c, "Cyaa\n"); + printf("%s", c); + + char * d; + d = arena_allocate (6); + strcpy(d, "Heyo\n"); + printf("%s", d); + + char * e; + e = arena_allocate (6); + strcpy(e, "Heyo\n"); + printf("%s", e); + + char * f; + f = arena_allocate (6); + strcpy(f, "Heyo\n"); + printf("%s", f); + return (0); }