diff --git a/kernel/src/allocator/arena.c b/kernel/src/allocator/arena.c new file mode 100644 index 0000000..b794692 --- /dev/null +++ b/kernel/src/allocator/arena.c @@ -0,0 +1,17 @@ +/* An Arena allocator is a very basic allocator that simply discards free() calls. */ + +#include "arena.h" +#include + +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; +} \ No newline at end of file diff --git a/kernel/src/allocator/arena.h b/kernel/src/allocator/arena.h new file mode 100644 index 0000000..81e821b --- /dev/null +++ b/kernel/src/allocator/arena.h @@ -0,0 +1,8 @@ +#include + +struct arena_allocator { + size_t begin; + size_t length; +}; + +void *arena_alloc(struct arena_allocator* alloc, size_t length, size_t align); \ No newline at end of file