Added a very simple arena allocator
This commit is contained in:
parent
6f33a9a3e4
commit
35e5c8c3c2
2 changed files with 43 additions and 0 deletions
28
src/arena_allocator.c
Normal file
28
src/arena_allocator.c
Normal file
|
|
@ -0,0 +1,28 @@
|
||||||
|
#include "arena_allocator.h"
|
||||||
|
#include <assert.h>
|
||||||
|
#include <math.h>
|
||||||
|
#include <stddef.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
Arena arena_init(size_t capacity) {
|
||||||
|
Arena result = {.capacity = capacity, .size = 0, .data = malloc(capacity)};
|
||||||
|
assert(result.data != NULL);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
void arena_deinit(Arena *arena) {
|
||||||
|
free(arena->data);
|
||||||
|
*arena = (Arena){.capacity = NAN, .size = 0, .data = NULL};
|
||||||
|
}
|
||||||
|
|
||||||
|
void *arena_alloc(Arena *arena, size_t size) {
|
||||||
|
assert(arena->size + size <= arena->capacity);
|
||||||
|
void *result = &arena->data[arena->size];
|
||||||
|
arena->size += size;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
void *arena_clear(Arena *arena) {
|
||||||
|
arena->size = 0;
|
||||||
|
return arena->data;
|
||||||
|
}
|
||||||
15
src/arena_allocator.h
Normal file
15
src/arena_allocator.h
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
size_t capacity;
|
||||||
|
size_t size;
|
||||||
|
void *data;
|
||||||
|
} Arena;
|
||||||
|
|
||||||
|
Arena arena_init(size_t capacity);
|
||||||
|
void arena_deinit(Arena *arena);
|
||||||
|
|
||||||
|
void *arena_alloc(Arena *arena, size_t size);
|
||||||
|
void *arena_clear(Arena *arena);
|
||||||
Loading…
Reference in a new issue