htils 1
A small set of utilities for C programming.
Loading...
Searching...
No Matches
arena.h
Go to the documentation of this file.
1#ifndef HTILS_ARENA_H
2#define HTILS_ARENA_H
3
4//
5//
6//
7
8#ifdef HTILS_THREAD_SAFE
10#include <stdatomic.h>
11#include <threads.h>
12#endif
13
14#include <htils/basictypes.h>
15
16#define KiB(bytes) ((u64)bytes << 10)
17#define MiB(bytes) ((u64)bytes << 20)
18#define GiB(bytes) ((u64)bytes << 30)
19
20//
21//
22//
23
24#ifndef HTILS_THREAD_SAFE
39#else
49typedef struct arena {
54 mtx_t commit_mtx;
55} arena_t;
56#endif
57
68
69//
70//
71//
72
98arena_t *arena_new(u64 reserve_size, u64 commit_size);
99
121
122//
123//
124//
125
146void *__arena_alloc(struct arena *arena, u64 size);
147
168void *__arena_alloc_zeroed(struct arena *arena, u64 size);
169
188void __arena_dealloc(struct arena *arena, u64 size);
189
190//
191//
192//
193
214#define arena_alloc(arena, type, size) \
215 __arena_alloc(arena, sizeof(type) * size);
216
238#define arena_alloc_zeroed(arena, type, size) \
239 __arena_alloc_zeroed(arena, sizeof(type) * size);
240
258#define arena_dealloc(arena, type, size) \
259 __arena_dealloc(arena, sizeof(type) * size);
260
261//
262//
263//
264
282
297
298//
299//
300//
301
317
332
333#endif // !HTILS_ARENA_H
void __arena_dealloc(struct arena *arena, u64 size)
Deallocate a chunk of memory from the arena.
Definition arena.c:342
void * __arena_alloc(struct arena *arena, u64 size)
Allocate a chunk of memory to the arena.
Definition arena.c:310
void * __arena_alloc_zeroed(struct arena *arena, u64 size)
Allocate a chunk of zeroed memory to the arena.
Definition arena.c:481
void arena_free(arena_t *arena)
Free an arena.
Definition arena.c:300
struct arena arena_t
An arena.
void arena_clear(arena_t *arena)
Clear the arena.
Definition arena.c:488
temp_arena_t temp_arena_new(arena_t *arena)
Create a new temp_arena.
Definition arena.c:364
void arena_dealloc_to(arena_t *arena, u64 pos)
Set arena position to @pos.
Definition arena.c:353
struct temp_arena temp_arena_t
A temporary arena.
arena_t * arena_new(u64 reserve_size, u64 commit_size)
Create a new arena.
Definition arena.c:277
void temp_arena_free(temp_arena_t temp)
Free a temp_arena.
Definition arena.c:369
_Atomic u64 atomic_u64
Definition atomic_types.h:18
uint64_t u64
Definition basictypes.h:18
An arena.
Definition arena.h:33
u64 reserved
Definition arena.h:34
u64 commit_pos
Definition arena.h:37
u64 committed
Definition arena.h:35
u64 pos
Definition arena.h:36
A temporary arena.
Definition arena.h:64
u64 start_pos
Definition arena.h:66
struct arena * arena
Definition arena.h:65