29 kpanic(
"0 sized malloc requested");
31 Size +=
sizeof(Header);
33 Header* Prev = &mem_alloc.
m_Base;
34 Header* Next = mem_alloc.
m_Base.m_Next;
38 while ((uint32_t) Next != mem_alloc.
m_EndAdd)
40 if (Next->m_Size == Size)
42 Prev->m_Next = Next->m_Next;
45 Next->m_Next =
nullptr;
48 return (
void*) (Next + 1);
50 else if (Next->m_Size > Size)
52 Header* Leftover = (Header*) ((uint32_t) Next + Size);
53 Leftover->m_Next = Next->m_Next;
54 Leftover->m_Size = Next->m_Size - Size;
55 Prev->m_Next = Leftover;
57 Next->m_Next =
nullptr;
60 return (
void*) (Next + 1);
67 kpanic(
"Failed to allocate memory");
72 Header* Prev = &mem_alloc.
m_Base;
73 Header* Next = mem_alloc.
m_Base.m_Next;
74 Header* Block = (Header*) Ptr - 1;
75 size_t Size = ((Header*) Block)->m_Size;
79 while ( ((uint32_t) Next != mem_alloc.
m_EndAdd)
87 if (Prev == &mem_alloc.
m_Base)
94 if ((uint32_t) Prev + Prev->m_Size == (uint32_t) Block)
100 if ((uint32_t) Block + Block->m_Size == (uint32_t) Next)
102 Block->m_Size += Next->m_Size;
103 Block->m_Next = Next->m_Next;
MemoryAllocator mem_alloc
void * kmalloc(size_t Size)
kernel malloc
void KMALLOC()
Provides memory allocator with range of reserved memory address to manage.
Disables interrupt on construction, restores previous interrupt mask on scope exit.
Manages kernel heap memory.
contains all kernel initialization routines
void free(void *Ptr)
kernel free
uint32_t m_EndAdd
range of reserved address for kernel heap memory
uint32_t m_StartAdd
range of reserved address for kernel heap memory
void Initialize(const uint32_t StartAdd, const uint32_t EndAdd)
Points to range of reserved physical memory for heap allocator use.