#include #include #include 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_destroy(Arena *); int main(void){ Arena arena = arena_create(13); int *ptrInt1 = (int*)arena_alloc(&arena, sizeof(int)); int *ptrInt2 = (int*)arena_alloc(&arena, sizeof(int)); float *ptrFloat1 = (float*)arena_alloc(&arena, sizeof(float)); char *ptrChar1 = (char*)arena_alloc(&arena, sizeof(char)); int need = sizeof(int)*2 + sizeof(float) + sizeof(char); printf("sizeof int: %d\n", (int)sizeof(int)); printf("sizeof float: %d\n", (int)sizeof(float)); printf("sizeof char: %d\n", (int)sizeof(char)); printf("Necesitamos: %d\n", need); if(ptrInt1 != NULL){ *ptrInt1 = 18; printf("Primer entero: %d\n", *ptrInt1); } if(ptrInt2 != NULL){ *ptrInt2 = 27; printf("Segundo entero: %d\n", *ptrInt2); } if(ptrFloat1 != NULL){ *ptrFloat1 = 3.1415f; printf("Primer flotante: %f\n", *ptrFloat1); } if(ptrChar1 != NULL){ *ptrChar1 = 'L'; printf("Primer char: %c\n", *ptrChar1); } 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_destroy(Arena *ref_arena){ if(ref_arena->buffer != NULL){ free(ref_arena->buffer); ref_arena->buffer = NULL; } }