Added simple arena allocator from my other game engine.
This commit is contained in:
parent
420845fd87
commit
5944fcda92
3 changed files with 53 additions and 5 deletions
32
src/arena_allocator.c
Normal file
32
src/arena_allocator.c
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
#include "arena_allocator.h"
|
||||
#include <assert.h>
|
||||
#include <stddef.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#define DEFAULT_ARENA_SIZE 1048576 /* 8 * 1024 * 1024 : 8MB*/
|
||||
|
||||
Arena arena_init(size_t capacity) {
|
||||
if (capacity == 0) {
|
||||
capacity = DEFAULT_ARENA_SIZE;
|
||||
}
|
||||
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 = 0, .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;
|
||||
unsigned char *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);
|
||||
11
src/main.c
11
src/main.c
|
|
@ -1,10 +1,12 @@
|
|||
#include "SDL3/SDL_init.h"
|
||||
#include "SDL3/SDL_log.h"
|
||||
#include "SDL3/SDL_render.h"
|
||||
#include "SDL3/SDL_video.h"
|
||||
#include <SDL3/SDL_init.h>
|
||||
#include <SDL3/SDL_log.h>
|
||||
#include <SDL3/SDL_render.h>
|
||||
#include <SDL3/SDL_video.h>
|
||||
#include <GL/glew.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "arena_allocator.h"
|
||||
|
||||
// settings
|
||||
const unsigned int SCR_WIDTH = 800;
|
||||
const unsigned int SCR_HEIGHT = 600;
|
||||
|
|
@ -104,7 +106,6 @@ int main(int argc, char *argv[]) {
|
|||
-0.5f, 0.5f, 0.0f // top left
|
||||
};
|
||||
unsigned int indices[] = {
|
||||
// note that we start from 0!
|
||||
0, 1, 3, // first Triangle
|
||||
1, 2, 3 // second Triangle
|
||||
};
|
||||
|
|
|
|||
Loading…
Reference in a new issue