blob: dc2d160ff6054176ad98f8f92e573a48f9c35317 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
#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;
}
|