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_init.h>
|
||||||
#include "SDL3/SDL_log.h"
|
#include <SDL3/SDL_log.h>
|
||||||
#include "SDL3/SDL_render.h"
|
#include <SDL3/SDL_render.h>
|
||||||
#include "SDL3/SDL_video.h"
|
#include <SDL3/SDL_video.h>
|
||||||
#include <GL/glew.h>
|
#include <GL/glew.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#include "arena_allocator.h"
|
||||||
|
|
||||||
// settings
|
// settings
|
||||||
const unsigned int SCR_WIDTH = 800;
|
const unsigned int SCR_WIDTH = 800;
|
||||||
const unsigned int SCR_HEIGHT = 600;
|
const unsigned int SCR_HEIGHT = 600;
|
||||||
|
|
@ -104,7 +106,6 @@ int main(int argc, char *argv[]) {
|
||||||
-0.5f, 0.5f, 0.0f // top left
|
-0.5f, 0.5f, 0.0f // top left
|
||||||
};
|
};
|
||||||
unsigned int indices[] = {
|
unsigned int indices[] = {
|
||||||
// note that we start from 0!
|
|
||||||
0, 1, 3, // first Triangle
|
0, 1, 3, // first Triangle
|
||||||
1, 2, 3 // second Triangle
|
1, 2, 3 // second Triangle
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue