internal Arena * arena_initialize(u64 size, b8 growable) { Arena *result = 0; void *backing_buffer = platform_memory_reserve(size); if (backing_buffer != NULL) { platform_memory_commit(backing_buffer, ARENA_INITIAL_COMMIT_SIZE); result = (Arena*) backing_buffer; result->backing_buffer = backing_buffer; // rhjr: immutable arena header result->base_pos = sizeof(Arena); result->commit_pos = sizeof(Arena); result->growable = growable; result->size = size; } // rhjr: arenas should be instantiated early on in the programs lifetime, that // is why this assertion will also be used in production. ASSERT(result != 0); return result; } internal Arena * arena_initialize_default() { Arena *result = arena_initialize(ARENA_DEFAULT_RESERVE_SIZE, 1); return result; } internal void * arena_allocate(Arena *arena, u64 size) { } internal void arena_release(Arena *arena) { for (Arena *node = arena->current, *prev = 0; node != 0; node = prev) { prev = node->prev; platform_memory_release(node, node->size); } }