#include "memorymanagement.h" #include "string.h" #include "kernel.h" void memory_manager_init( memory_manager_t *memory_manager, size_t offset, size_t size ) { memset( memory_manager, 0, sizeof( memory_manager_t ) ); memory_manager->offset = offset; memory_manager->size = size; memory_manager->free_ptr = offset; } void *memory_manager_allocate( memory_manager_t *memory_manager, size_t size ) { void *p = NULL; if( memory_manager->free_ptr - memory_manager->offset + size > memory_manager->size ) { kernel_panic( "Heap allocation out of memory (requested %d bytes, available %d)", size, size - ( memory_manager->free_ptr - memory_manager->offset ) - 1 ); } p = (void *)memory_manager->free_ptr; memory_manager->free_ptr += size; return p; } void memory_manager_deallocate( memory_manager_t *memory_manager, void **p ) { if( *p == NULL ) { kernel_panic( "Double free of pointer 0x%X in heap", *p ); } *p = NULL; }