From 0bd7c5dc0725a4882cb33c5d8f1a3b101d4025cd Mon Sep 17 00:00:00 2001 From: pryazha Date: Thu, 20 Feb 2025 15:08:47 +0500 Subject: initial --- prb_memory.c | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 prb_memory.c (limited to 'prb_memory.c') diff --git a/prb_memory.c b/prb_memory.c new file mode 100644 index 0000000..4bceccc --- /dev/null +++ b/prb_memory.c @@ -0,0 +1,42 @@ +Arena *arena_alloc(U64 cap) +{ + Arena *arena = 0; + + /* TODO(pryazha): Use OS related memory allocator (like VirtualAlloc on Windows) */ + arena = malloc(sizeof(Arena)); + Assert(arena); + + if (!cap) + cap = DEFAULT_ALLOC_SIZE; + + arena->mem = malloc(cap); + Assert(arena->mem); + arena->cap = cap; + arena->used = 0; + + return arena; +} + +void arena_release(Arena *arena) +{ + free(arena->mem); + arena->mem = 0; + arena->cap = 0; + arena->used = 0; + free(arena); +} + +void *arena_push(Arena *arena, U64 size) +{ + Assert(arena->used+size <= arena->cap); + void *r = arena->mem+arena->used; + arena->used += size; + return r; +} + +void arena_pop(Arena *arena, U64 amount) +{ + Assert(arena); + U64 clamped = ClampTop(amount, arena->used); + arena->used = arena->used-clamped; +} -- cgit v1.2.3-70-g09d2