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#ifdef HTILS_THREAD_SAFE
8#include <stdatomic.h>
9#include <threads.h>
10#endif
11
12#include <htils/basictypes.h>
13
14/***********************************/
15
16#define KiB(bytes) ((u64)bytes << 10)
17#define MiB(bytes) ((u64)bytes << 20)
18#define GiB(bytes) ((u64)bytes << 30)
19
20#ifndef HTILS_THREAD_SAFE
29typedef struct arena {
32 u64 pos;
34} arena_t;
35#else
52#endif
53
64
65//
66//
67//
68
96arena_t *arena_new(u64 reserve_size, u64 commit_size);
97
119
120//
121//
122//
123
145void *__arena_alloc(struct arena *arena, u64 size);
146
166void *__arena_alloc_zeroed(struct arena *arena, u64 size);
167
186void __arena_dealloc(struct arena *arena, u64 size);
187
188//
189//
190//
191
212#define arena_alloc(arena, type, size) \
213 __arena_alloc(arena, sizeof(type) * size);
214
236#define arena_alloc_zeroed(arena, type, size) \
237 __arena_alloc_zeroed(arena, sizeof(type) * size);
238
256#define arena_dealloc(arena, type, size) \
257 __arena_dealloc(arena, sizeof(type) * size);
258
259//
260//
261//
262
279
294
295//
296//
297//
298
314
328
329#endif // !HTILS_ARENA_H
void __arena_dealloc(struct arena *arena, u64 size)
Deallocate a chunk of memory from the arena.
Definition arena.c:443
void * __arena_alloc(struct arena *arena, u64 size)
Allocate a chunk of memory to the arena.
Definition arena.c:403
void * __arena_alloc_zeroed(struct arena *arena, u64 size)
Allocate a chunk of zeroed memory to the arena.
Definition arena.c:474
void arena_free(arena_t *arena)
Free an arena.
Definition arena.c:396
struct arena arena_t
An atomic arena.
void arena_clear(arena_t *arena)
Clear the arena.
Definition arena.c:481
temp_arena_t temp_arena_new(arena_t *arena)
Create a new temp_arena.
Definition arena.c:458
void arena_dealloc_to(arena_t *arena, u64 pos)
Set arena position to pos.
Definition arena.c:451
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:372
void temp_arena_free(temp_arena_t temp)
Free a temp_arena.
Definition arena.c:463
_Atomic u64 atomic_u64
Definition atomic_types.h:22
uint64_t u64
Definition basictypes.h:22
An atomic arena.
Definition arena.h:45
u64 reserved
Definition arena.h:46
mtx_t commit_mtx
Definition arena.h:50
u64 commit_pos
Definition arena.h:49
u64 committed
Definition arena.h:47
atomic_u64 pos
Definition arena.h:48
A temporary arena.
Definition arena.h:60
u64 start_pos
Definition arena.h:62
struct arena * arena
Definition arena.h:61