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