2024-07-10 17:48:23 +02: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 11:58:48 +02:00
|
|
|
u64 mem_used;
|
|
|
|
u64 mem_peak_used;
|
2024-07-10 20:11:42 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
struct Temp {
|
|
|
|
Arena *arena;
|
|
|
|
u64 pos;
|
2024-07-10 17:48:23 +02:00
|
|
|
};
|
2024-07-16 17:50:30 +02: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)
|