agrego practicas
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
#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;
|
||||
}
|
||||
}
|
||||
|
||||
Executable
BIN
Binary file not shown.
Reference in New Issue
Block a user