diff --git a/src/arena_allocator.c b/src/arena_allocator.c index d543d4a..1c94beb 100644 --- a/src/arena_allocator.c +++ b/src/arena_allocator.c @@ -6,14 +6,14 @@ #define DEFAUL_REGION_SIZE 1048576 /* 8 * 1024 * 1024 = 8MB */ Region *new_region(size_t capacity) { - if (capacity == 0) { + if (capacity < DEFAUL_REGION_SIZE) { capacity = DEFAUL_REGION_SIZE; } - Region *region = malloc(capacity); + Region *region = malloc(capacity + sizeof(Region)); assert(region != NULL); *region = (Region){.next = NULL, - .capacity = capacity + sizeof(Region), - .cursor = sizeof(Region) - 1}; + .capacity = capacity, + .cursor = 0}; return region; } @@ -39,8 +39,6 @@ void *arena_alloc(Arena *arena, size_t size) { assert(region != NULL); if (region->cursor + size > region->capacity) { - if (size < DEFAUL_REGION_SIZE) - size = DEFAUL_REGION_SIZE; region->next = new_region(size); arena->end = region->next; region = region->next; @@ -51,7 +49,7 @@ void *arena_alloc(Arena *arena, size_t size) { return result; } -//void *arena_clear(Arena *arena) { -// arena->size = 0; -// return arena->data; -//} +// void *arena_clear(Arena *arena) { +// arena->size = 0; +// return arena->data; +// } diff --git a/src/arena_allocator.h b/src/arena_allocator.h index 3300084..9209bb7 100644 --- a/src/arena_allocator.h +++ b/src/arena_allocator.h @@ -8,7 +8,7 @@ struct Region_s { Region *next; size_t capacity; size_t cursor; - uintptr_t data[]; + unsigned char data[]; }; typedef struct { diff --git a/src/main.c b/src/main.c index 77fcffc..4c2facd 100644 --- a/src/main.c +++ b/src/main.c @@ -8,6 +8,17 @@ #include "shader.h" #include "window.h" +#include "arena_allocator.h" + +/*int main(int argc, char *argv[]) { + Arena global_arena = arena_init(0); + for (int i = 0; i <= 1048576+100; i++) { + int *number = arena_alloc(&global_arena, sizeof(int)); + *number = 42; + } + arena_deinit(&global_arena); +}*/ + int main(int argc, char *argv[]) { wn_window window = {0}; if (!wn_window_init(&window)) {