Finished braindead arena allocator...

This commit is contained in:
xolatile
2024-11-18 05:11:10 -05:00
parent 2047bc1a99
commit 897edcf92e
3 changed files with 32 additions and 4 deletions

@ -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;

Binary file not shown.

@ -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);
}