Added a very simple arena allocator

This commit is contained in:
Warwick 2025-01-24 15:33:50 +00:00
parent 6f33a9a3e4
commit 35e5c8c3c2
2 changed files with 43 additions and 0 deletions

28
src/arena_allocator.c Normal file
View file

@ -0,0 +1,28 @@
#include "arena_allocator.h"
#include <assert.h>
#include <math.h>
#include <stddef.h>
#include <stdlib.h>
Arena arena_init(size_t capacity) {
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 = NAN, .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;
void *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);