Added simple arena allocator from my other game engine.

This commit is contained in:
Warwick 2025-08-15 13:08:38 +01:00
parent 420845fd87
commit 5944fcda92
3 changed files with 53 additions and 5 deletions

32
src/arena_allocator.c Normal file
View file

@ -0,0 +1,32 @@
#include "arena_allocator.h"
#include <assert.h>
#include <stddef.h>
#include <stdlib.h>
#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;
}

15
src/arena_allocator.h Normal file
View file

@ -0,0 +1,15 @@
#pragma once
#include <stddef.h>
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);

View file

@ -1,10 +1,12 @@
#include "SDL3/SDL_init.h" #include <SDL3/SDL_init.h>
#include "SDL3/SDL_log.h" #include <SDL3/SDL_log.h>
#include "SDL3/SDL_render.h" #include <SDL3/SDL_render.h>
#include "SDL3/SDL_video.h" #include <SDL3/SDL_video.h>
#include <GL/glew.h> #include <GL/glew.h>
#include <stdlib.h> #include <stdlib.h>
#include "arena_allocator.h"
// settings // settings
const unsigned int SCR_WIDTH = 800; const unsigned int SCR_WIDTH = 800;
const unsigned int SCR_HEIGHT = 600; const unsigned int SCR_HEIGHT = 600;
@ -104,7 +106,6 @@ int main(int argc, char *argv[]) {
-0.5f, 0.5f, 0.0f // top left -0.5f, 0.5f, 0.0f // top left
}; };
unsigned int indices[] = { unsigned int indices[] = {
// note that we start from 0!
0, 1, 3, // first Triangle 0, 1, 3, // first Triangle
1, 2, 3 // second Triangle 1, 2, 3 // second Triangle
}; };