83 lines
1.5 KiB
C
83 lines
1.5 KiB
C
#include <stddef.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <time.h>
|
|
|
|
#define FPS 10
|
|
|
|
typedef struct{
|
|
unsigned char *buffer;
|
|
size_t size;
|
|
size_t offset;
|
|
}Arena;
|
|
|
|
Arena arena_create(size_t);
|
|
void* arena_alloc(Arena *, size_t);
|
|
void arena_reset(Arena *);
|
|
void arena_destroy(Arena *);
|
|
|
|
int main(void){
|
|
srand(time(NULL));
|
|
Arena arena = arena_create(100);
|
|
|
|
for(int i=0; i < FPS; i++){
|
|
|
|
int* ptrLeft = arena_alloc(&arena, sizeof(int));
|
|
|
|
if(ptrLeft != NULL){
|
|
*ptrLeft = rand()%FPS;
|
|
printf("El datos del frame es: %d\n", *ptrLeft);
|
|
}
|
|
|
|
arena_reset(&arena);
|
|
}
|
|
|
|
arena_destroy(&arena);
|
|
|
|
return 0;
|
|
}
|
|
|
|
Arena arena_create( size_t bytes){
|
|
Arena new_arena = {
|
|
.buffer = NULL,
|
|
.size = bytes,
|
|
.offset = 0
|
|
};
|
|
|
|
new_arena.buffer = (unsigned char *)malloc(bytes);
|
|
|
|
if(new_arena.buffer == NULL){
|
|
perror("Error asignando memoria");
|
|
exit(1);
|
|
}
|
|
|
|
return new_arena;
|
|
|
|
}
|
|
void* arena_alloc(Arena *ref_arena, size_t bytes){
|
|
|
|
if(ref_arena->buffer == NULL){
|
|
return NULL;
|
|
}
|
|
|
|
if(ref_arena->offset + bytes > ref_arena->size){
|
|
perror("Memoria llena\n");
|
|
return NULL;
|
|
}
|
|
void* ptr_ref = ref_arena->buffer + ref_arena->offset;
|
|
ref_arena->offset += bytes;
|
|
return ptr_ref;
|
|
}
|
|
|
|
void arena_reset(Arena *ref_arena){
|
|
ref_arena->offset = 0;
|
|
}
|
|
|
|
void arena_destroy(Arena *ref_arena){
|
|
if(ref_arena->buffer != NULL){
|
|
free(ref_arena->buffer);
|
|
ref_arena->buffer = NULL;
|
|
}
|
|
}
|
|
|