#include #include #include #include #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; } }