Arena showcase...

This commit is contained in:
xolatile 2024-11-18 05:19:39 -05:00
parent 897edcf92e
commit 49c6d1412b
3 changed files with 13 additions and 9 deletions

View File

@ -35,8 +35,6 @@ extern void * arena_allocate(size_t size);
#endif #endif
#ifdef ARENA_IMPLEMENTATION #ifdef ARENA_IMPLEMENTATION
#define arena_block_allocation_size (13)
//~typedef struct { //~typedef struct {
//~char * buffer; //~char * buffer;
//~size_t count; //~size_t count;
@ -44,6 +42,10 @@ extern void * arena_allocate(size_t size);
//~void * next; //~void * next;
//~} arena_data; //~} arena_data;
#ifndef ARENA_BLOCK_ALLOCATION_SIZE
#define ARENA_BLOCK_ALLOCATION_SIZE (1024)
#endif
static arena_data * arena; static arena_data * arena;
static int open_arena = 0; static int open_arena = 0;
@ -104,13 +106,13 @@ void * arena_allocate(size_t size) {
arena = calloc(1, sizeof(*arena)); arena = calloc(1, sizeof(*arena));
arena->block_count++; arena->block_count++;
arena->block_array = realloc(arena->block_array, arena->block_count * sizeof(*arena->block_array)); arena->block_array = realloc(arena->block_array, arena->block_count * sizeof(*arena->block_array));
arena->block_array[arena->block_count - 1] = arena_init(arena_block_allocation_size); arena->block_array[arena->block_count - 1] = arena_init(ARENA_BLOCK_ALLOCATION_SIZE);
} }
if (arena->block_array[arena->block_count - 1]->count + size >= arena->block_array[arena->block_count - 1]->capacity) { if (arena->block_array[arena->block_count - 1]->count + size >= arena->block_array[arena->block_count - 1]->capacity) {
arena->block_count++; arena->block_count++;
arena->block_array = realloc(arena->block_array, arena->block_count * sizeof(*arena->block_array)); arena->block_array = realloc(arena->block_array, arena->block_count * sizeof(*arena->block_array));
arena->block_array[arena->block_count - 1] = arena_init(arena_block_allocation_size); arena->block_array[arena->block_count - 1] = arena_init(ARENA_BLOCK_ALLOCATION_SIZE);
} }
size_t spot = arena->block_array[arena->block_count - 1]->count; size_t spot = arena->block_array[arena->block_count - 1]->count;

Binary file not shown.

View File

@ -1,4 +1,6 @@
#define ARENA_IMPLEMENTATION #define ARENA_IMPLEMENTATION
#define ARENA_BLOCK_ALLOCATION_SIZE (13)
#include "arena.h" #include "arena.h"
#include <stdio.h> #include <stdio.h>
@ -19,18 +21,18 @@ int main (void) {
printf("%s", c); printf("%s", c);
char * d; char * d;
d = arena_allocate (6); d = arena_allocate (10);
strcpy(d, "Heyo\n"); strcpy(d, "Holy crap\n");
printf("%s", d); printf("%s", d);
char * e; char * e;
e = arena_allocate (6); e = arena_allocate (8);
strcpy(e, "Heyo\n"); strcpy(e, "Serbia\n");
printf("%s", e); printf("%s", e);
char * f; char * f;
f = arena_allocate (6); f = arena_allocate (6);
strcpy(f, "Heyo\n"); strcpy(f, "Base\n");
printf("%s", f); printf("%s", f);
return (0); return (0);