From 5944fcda92f47bea10b69b9b5a06aa3e9dcb6fa1 Mon Sep 17 00:00:00 2001 From: Warwick Date: Fri, 15 Aug 2025 13:08:38 +0100 Subject: [PATCH] Added simple arena allocator from my other game engine. --- src/arena_allocator.c | 32 ++++++++++++++++++++++++++++++++ src/arena_allocator.h | 15 +++++++++++++++ src/main.c | 11 ++++++----- 3 files changed, 53 insertions(+), 5 deletions(-) create mode 100644 src/arena_allocator.c create mode 100644 src/arena_allocator.h diff --git a/src/arena_allocator.c b/src/arena_allocator.c new file mode 100644 index 0000000..591dd8d --- /dev/null +++ b/src/arena_allocator.c @@ -0,0 +1,32 @@ +#include "arena_allocator.h" +#include +#include +#include + +#define DEFAULT_ARENA_SIZE 1048576 /* 8 * 1024 * 1024 : 8MB*/ + +Arena arena_init(size_t capacity) { + if (capacity == 0) { + capacity = DEFAULT_ARENA_SIZE; + } + Arena result = {.capacity = capacity, .size = 0, .data = malloc(capacity)}; + assert(result.data != NULL); + return result; +} + +void arena_deinit(Arena *arena) { + free(arena->data); + *arena = (Arena){.capacity = 0, .size = 0, .data = NULL}; +} + +void *arena_alloc(Arena *arena, size_t size) { + assert(arena->size + size <= arena->capacity); + void *result = &arena->data[arena->size]; + arena->size += size; + return result; +} + +void *arena_clear(Arena *arena) { + arena->size = 0; + return arena->data; +} diff --git a/src/arena_allocator.h b/src/arena_allocator.h new file mode 100644 index 0000000..981f76c --- /dev/null +++ b/src/arena_allocator.h @@ -0,0 +1,15 @@ +#pragma once + +#include + +typedef struct { + size_t capacity; + size_t size; + unsigned char *data; +} Arena; + +Arena arena_init(size_t capacity); +void arena_deinit(Arena *arena); + +void *arena_alloc(Arena *arena, size_t size); +void *arena_clear(Arena *arena); diff --git a/src/main.c b/src/main.c index 5e2147c..f4abd11 100644 --- a/src/main.c +++ b/src/main.c @@ -1,10 +1,12 @@ -#include "SDL3/SDL_init.h" -#include "SDL3/SDL_log.h" -#include "SDL3/SDL_render.h" -#include "SDL3/SDL_video.h" +#include +#include +#include +#include #include #include +#include "arena_allocator.h" + // settings const unsigned int SCR_WIDTH = 800; const unsigned int SCR_HEIGHT = 600; @@ -104,7 +106,6 @@ int main(int argc, char *argv[]) { -0.5f, 0.5f, 0.0f // top left }; unsigned int indices[] = { - // note that we start from 0! 0, 1, 3, // first Triangle 1, 2, 3 // second Triangle };