Part 3 — The Simplest Arena
An arena is just a struct containing:
- A base pointer
- Total size
- Current offset
It looks like this in C:
typedef struct {
unsigned char *base;
size_t size;
size_t offset;
} Arena;
That is all we need.
Initialize Arena
Arena arena_create(size_t size) {
Arena arena;
arena.base = malloc(size);
arena.size = size;
arena.offset = 0;
return arena;
}
Allocate Memory
void *arena_alloc(Arena *arena, size_t size) {
if (arena->offset + size > arena->size)
return NULL;
void *ptr = arena->base + arena->offset;
arena->offset += size;
return ptr;
}
This is called a bump allocator.
We just move the pointer forward.
Reset Arena
void arena_reset(Arena *arena) {
arena->offset = 0;
}
Everything is freed instantly.
Next we fix alignment.