cbase 1.46.11
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
64
66#define ARENA_DEFAULT_ALIGN 8
67
75#define ARENA_COMMIT_SIZE KB(64)
76
89
109
110// Core API
111
122Arena
123arena_create(usize reserve_size);
124
130void
131arena_release(Arena *arena);
132
145void *
146arena_push(Arena *arena, usize size);
147
158void *
159arena_push_zero(Arena *arena, usize size);
160
173void *
174arena_push_aligned(Arena *arena, usize size, usize alignment);
175
186void
187arena_pop_to(Arena *arena, usize pos);
188
198void
199arena_clear(Arena *arena);
200
201// Temporary / Scratch API
202
209arena_temp_begin(Arena *arena);
210
219void
221
222// Convenience Macros
223
237#define PUSH_STRUCT(arena, type) ((type *)arena_push_zero((arena), sizeof(type)))
238
252#define PUSH_ARRAY(arena, type, count) ((type *)arena_push_zero((arena), sizeof(type) * (count)))
253
269#define PUSH_ARRAY_ALIGNED(arena, type, count, alignment) \
270 ((type *)arena_push_aligned((arena), sizeof(type) * (count), (alignment)))
271 // end arena_alloc
273
275
276#endif // MEM_ARENA_H
Context detection, utilities, compiler abstractions, and data structures.
Core type definitions and fixed-width aliases.
Arena arena_create(usize reserve_size)
Creates and initializes a new arena, reserving virtual address space.
Definition mem_arena.c:60
void arena_release(Arena *arena)
Releases the entire arena back to the OS, invalidating all pointers into it.
Definition mem_arena.c:71
void arena_temp_end(ArenaTemp temp)
Restores the arena to the position saved in temp.
Definition mem_arena.c:132
void arena_clear(Arena *arena)
Resets the arena to empty by setting pos back to 0.
Definition mem_arena.c:117
void * arena_push(Arena *arena, usize size)
Allocates size bytes from the arena, aligned to ARENA_DEFAULT_ALIGN.
Definition mem_arena.c:83
void arena_pop_to(Arena *arena, usize pos)
Rolls the arena back to a specific byte offset.
Definition mem_arena.c:109
ArenaTemp arena_temp_begin(Arena *arena)
Saves the current arena position as a rewind checkpoint.
Definition mem_arena.c:123
void * arena_push_aligned(Arena *arena, usize size, usize alignment)
Allocates size bytes from the arena with an explicit power-of-2 alignment.
Definition mem_arena.c:99
void * arena_push_zero(Arena *arena, usize size)
Allocates size bytes from the arena, zeroed, aligned to ARENA_DEFAULT_ALIGN.
Definition mem_arena.c:89
uint8_t u8
Definition base_types.h:22
#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).
size_t usize
Definition base_types.h:43
Represents a linear memory arena backed by OS virtual memory.
Definition mem_arena.h:83
usize cap
Definition mem_arena.h:85
u8 * base
Definition mem_arena.h:84
usize pos
Definition mem_arena.h:86
usize cmt
Definition mem_arena.h:87
A saved checkpoint into an arena, used for scoped temporary allocations.
Definition mem_arena.h:105
usize pos
Definition mem_arena.h:107
Arena * arena
Definition mem_arena.h:106