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