2024-07-10 15:48:23 +00:00
|
|
|
#define ARENA_HEADER_SIZE 128
|
|
|
|
#define ARENA_COMMIT_SIZE (64 * 1024)
|
|
|
|
#define ARENA_RESERVE_SIZE (64 * 1024 * 1024)
|
|
|
|
|
|
|
|
struct Arena {
|
|
|
|
Arena *prev;
|
|
|
|
Arena *cur;
|
|
|
|
u64 base_pos;
|
|
|
|
u64 pos;
|
|
|
|
u64 cmt;
|
|
|
|
u64 res;
|
|
|
|
u64 align;
|
2024-07-12 09:58:48 +00:00
|
|
|
u64 mem_used;
|
|
|
|
u64 mem_peak_used;
|
2024-07-10 18:11:42 +00:00
|
|
|
b8 grow;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct Temp {
|
|
|
|
Arena *arena;
|
|
|
|
u64 pos;
|
2024-07-10 15:48:23 +00:00
|
|
|
};
|
2024-07-16 15:50:30 +00:00
|
|
|
|
|
|
|
struct Thread_Ctx {
|
|
|
|
Arena *arenas[2];
|
|
|
|
};
|
|
|
|
|
|
|
|
#define countof(a) (sizeof(a) / sizeof((a)[0]))
|
|
|
|
|
|
|
|
|
|
|
|
internal Arena *arena_alloc();
|
|
|
|
internal void arena_release(Arena *arena);
|
|
|
|
|
|
|
|
internal Arena *tctx_get_scratch(Arena **conflicts, u64 count);
|
|
|
|
|
|
|
|
#define scratch_begin(conflicts, count) temp_begin(tctx_get_scratch((conflicts), (count)))
|
|
|
|
#define scratch_end(scratch) temp_end(scratch)
|