htils
1
A small set of utilities for C programming.
Toggle main menu visibility
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
7
#include <
htils/atomic_types.h
>
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
29
typedef
struct
arena
{
30
u64
reserved
;
31
u64
committed
;
32
u64
pos
;
33
u64
commit_pos
;
34
}
arena_t
;
35
#else
45
typedef
struct
arena
{
46
u64
reserved
;
47
u64
committed
;
48
atomic_u64
pos
;
49
u64
commit_pos
;
50
mtx_t
commit_mtx
;
51
}
arena_t
;
52
#endif
53
60
typedef
struct
temp_arena
{
61
struct
arena
*
arena
;
62
u64
start_pos
;
63
}
temp_arena_t
;
64
65
//
66
//
67
//
68
96
arena_t
*
arena_new
(
u64
reserve_size,
u64
commit_size);
97
118
void
arena_free
(
arena_t
*
arena
);
119
120
//
121
//
122
//
123
145
void
*
__arena_alloc
(
struct
arena
*
arena
,
u64
size);
146
166
void
*
__arena_alloc_zeroed
(
struct
arena
*
arena
,
u64
size);
167
186
void
__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
278
void
arena_dealloc_to
(
arena_t
*
arena
,
u64
pos
);
279
293
void
arena_clear
(
arena_t
*
arena
);
294
295
//
296
//
297
//
298
313
temp_arena_t
temp_arena_new
(
arena_t
*
arena
);
314
327
void
temp_arena_free
(
temp_arena_t
temp);
328
329
#endif
// !HTILS_ARENA_H
__arena_dealloc
void __arena_dealloc(struct arena *arena, u64 size)
Deallocate a chunk of memory from the arena.
Definition
arena.c:443
__arena_alloc
void * __arena_alloc(struct arena *arena, u64 size)
Allocate a chunk of memory to the arena.
Definition
arena.c:403
__arena_alloc_zeroed
void * __arena_alloc_zeroed(struct arena *arena, u64 size)
Allocate a chunk of zeroed memory to the arena.
Definition
arena.c:474
arena_free
void arena_free(arena_t *arena)
Free an arena.
Definition
arena.c:396
arena_t
struct arena arena_t
An atomic arena.
arena_clear
void arena_clear(arena_t *arena)
Clear the arena.
Definition
arena.c:481
temp_arena_new
temp_arena_t temp_arena_new(arena_t *arena)
Create a new temp_arena.
Definition
arena.c:458
arena_dealloc_to
void arena_dealloc_to(arena_t *arena, u64 pos)
Set arena position to pos.
Definition
arena.c:451
temp_arena_t
struct temp_arena temp_arena_t
A temporary arena.
arena_new
arena_t * arena_new(u64 reserve_size, u64 commit_size)
Create a new arena.
Definition
arena.c:372
temp_arena_free
void temp_arena_free(temp_arena_t temp)
Free a temp_arena.
Definition
arena.c:463
atomic_types.h
atomic_u64
_Atomic u64 atomic_u64
Definition
atomic_types.h:22
basictypes.h
u64
uint64_t u64
Definition
basictypes.h:22
arena
An atomic arena.
Definition
arena.h:45
arena::reserved
u64 reserved
Definition
arena.h:46
arena::commit_mtx
mtx_t commit_mtx
Definition
arena.h:50
arena::commit_pos
u64 commit_pos
Definition
arena.h:49
arena::committed
u64 committed
Definition
arena.h:47
arena::pos
atomic_u64 pos
Definition
arena.h:48
temp_arena
A temporary arena.
Definition
arena.h:60
temp_arena::start_pos
u64 start_pos
Definition
arena.h:62
temp_arena::arena
struct arena * arena
Definition
arena.h:61
include
htils
arena.h
Generated by
1.17.0