cbase 1.50.0
C/C++ Static Template
Loading...
Searching...
No Matches
mem_arena.h
Go to the documentation of this file.
1
51
52#ifndef MEM_ARENA_H
53#define MEM_ARENA_H
54
55#include "base/base_macros.h"
56#include "base/base_types.h"
57
59
65
67#define MEM_ARENA_ALIGNMENT 8
68
76
82
97mem_arena_create(usize reserve_size);
98
116void *
117mem_arena_push(MemArena *arena, usize size);
118
136void *
138
157void *
158mem_arena_push_aligned(MemArena *arena, usize size, usize alignment);
159
178char *
179mem_arena_push_cstr(MemArena *arena, const char *str, usize len);
180
198void
199mem_arena_pop_to(MemArena *arena, usize pos);
200
220void
222
240void
242
259void
261
263
264// Forward declaration of MemAllocator so we don't need a heavy include
265struct MemAllocator;
266
286struct MemAllocator
288
290
307
316void
318
320
331#define PUSH_STRUCT(arena, type) ((type *)mem_arena_push_zero((arena), sizeof(type)))
332
343#define PUSH_ARRAY(arena, type, count) \
344 ((type *)mem_arena_push_zero((arena), sizeof(type) * (count)))
345
354#define PUSH_STRUCT_ALIGNED(arena, type, alignment) \
355 ((type *)mem_arena_push_aligned((arena), sizeof(type), (alignment)))
356
366#define PUSH_ARRAY_ALIGNED(arena, type, count, alignment) \
367 ((type *)mem_arena_push_aligned((arena), sizeof(type) * (count), (alignment)))
368
386#define PUSH_CSTR(arena, cstr) (mem_arena_push_cstr((arena), (cstr), strlen(cstr)))
387
389
391
392#endif // MEM_ARENA_H
Context detection, compiler abstractions, utility macros, and data structures.
Core fixed-width type aliases and memory size constants.
uint8_t u8
Definition base_types.h:46
#define C_LINKAGE_END
Closes a C linkage block for C++ compilers (Empty in C).
#define C_LINKAGE_BEGIN
Opens a C linkage block for C++ compilers (Empty in C).
void mem_arena_clear(MemArena *arena)
Resets the arena pointer to zero, freeing all allocations in O(1).
Definition mem_arena.c:105
void mem_arena_temp_end(MemArenaTemp temp)
Restores the arena to the position saved in temp.
Definition mem_arena.c:141
void mem_arena_release(MemArena *arena)
Returns all virtual memory back to the operating system.
Definition mem_arena.c:59
void * mem_arena_push_zero(MemArena *arena, usize size)
Allocates bytes and explicitly zero-initializes them.
Definition mem_arena.c:77
void mem_arena_clear_and_decommit(MemArena *arena)
Clears the arena and returns all committed physical RAM to the OS.
Definition mem_arena.c:111
void * mem_arena_push_aligned(MemArena *arena, usize size, usize alignment)
Allocates bytes with a specific custom alignment.
Definition mem_arena.c:87
void * mem_arena_push(MemArena *arena, usize size)
Allocates bytes sequentially on the arena without zeroing.
Definition mem_arena.c:71
void mem_arena_pop_to(MemArena *arena, usize pos)
Rewinds the arena's pointer to a specific offset.
Definition mem_arena.c:97
struct MemAllocator mem_arena_allocator(MemArena *arena)
Wraps a MemArena in the generic MemAllocator interface.
Definition mem_arena.c:172
char * mem_arena_push_cstr(MemArena *arena, const char *str, usize len)
Copies a C string into the arena and appends a NUL terminator.
Definition mem_arena.c:121
MemArenaTemp mem_arena_temp_begin(MemArena *arena)
Temporary Memory API.
Definition mem_arena.c:132
MemArena mem_arena_create(usize reserve_size)
Initializes a new virtual memory Arena.
Definition mem_arena.c:48
size_t usize
Definition base_types.h:68
An abstract allocator interface.
A virtual memory-backed linear allocator.
Definition mem_arena.h:70
usize reserve
Definition mem_arena.h:74
usize commit
Definition mem_arena.h:73
u8 * base
Definition mem_arena.h:71
usize pos
Definition mem_arena.h:72
A temporary snapshot of an arena's state.
Definition mem_arena.h:78
MemArena * arena
Definition mem_arena.h:79