add arena allocator
This commit is contained in:
parent
d018c72200
commit
499e25d23d
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
@ -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);
|
||||||
Loading…
Reference in New Issue