Add stack allocator

This commit is contained in:
2023-12-07 10:31:12 +01:00
parent 488dccfada
commit 0d156f515e
13 changed files with 69 additions and 11 deletions

View File

@@ -0,0 +1,34 @@
#include "stack_alloc.h"
#include "memory.h"
BzStackAlloc bzStackAllocCreate(size_t size) {
BzStackAlloc alloc = {
.memory=bzAlloc(size),
.size=size,
.allocated=0
};
BZ_ASSERT(alloc.memory);
return alloc;
}
void bzStackAllocDestroy(BzStackAlloc *alloc) {
bzFree(alloc->memory);
alloc->memory = NULL;
alloc->size = 0;
alloc->allocated = 0;
}
void *bzStackAlloc(BzStackAlloc *alloc, size_t numBytes) {
BZ_ASSERT(alloc->size + numBytes < alloc->size);
void *allocated = (u8 *) alloc->memory + alloc->allocated;
alloc->allocated += numBytes;
return allocated;
}
void bzStackAllocFree(BzStackAlloc *alloc, void *ptr) {
size_t byteOffset = (u8 *) ptr - (u8 *) alloc->memory;
BZ_ASSERT(byteOffset >= 0 && byteOffset < alloc->size);
alloc->allocated = byteOffset;
}