Files
c-programming/c/arena2/main.c
T
2026-10-31 11:14:30 -03:00

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