Arena showcase...
This commit is contained in:
parent
897edcf92e
commit
49c6d1412b
@ -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;
|
||||||
|
BIN
library/test
BIN
library/test
Binary file not shown.
@ -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);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user