11 FEB 2026

mukeshkannan

arena allocation in c - part 2:…

homedocs

Part 1 — The Simplest Arena

An arena is just a struct containing:

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.