add arena allocator

This commit is contained in:
Quinten Kock 2020-12-05 03:33:26 +01:00
parent d018c72200
commit 499e25d23d
2 changed files with 25 additions and 0 deletions

View File

@ -0,0 +1,17 @@
/* An Arena allocator is a very basic allocator that simply discards free() calls. */
#include "arena.h"
#include <hal/ops.h>
void* arena_alloc(struct arena_allocator* alloc, size_t len, size_t align) {
if(alloc->begin % align) {
alloc->begin += (align - alloc->begin % align);
}
if(alloc->length < len) {
PANIC("Attempt to allocate more memory than is available");
}
void* retval = (void*)alloc->begin;
alloc->begin += len;
alloc->length -= len;
return retval;
}

View File

@ -0,0 +1,8 @@
#include <stddef.h>
struct arena_allocator {
size_t begin;
size_t length;
};
void *arena_alloc(struct arena_allocator* alloc, size_t length, size_t align);