Previous commit was a blunder. This commit setups up Malloc proper and includes a working string concat.

This commit is contained in:
2019-01-06 21:47:37 -06:00
parent 67bf4a355d
commit 657b716f77
9 changed files with 487 additions and 0 deletions
+70
View File
@@ -0,0 +1,70 @@
#include "../include/memorymanager.h"
#include "../include/system.h"
static struct MemoryChunk* First;
struct MemoryManager* ActiveMemoryManager = {0};
void MemoryManager(size_t start, size_t size)
{
if(size < sizeof(struct MemoryChunk))
{
First = 0;
return;
}
First = (struct MemoryChunk*) start;
First->Allocated = false;
First->Prev = 0;
First->Next = 0;
First->Size = size - sizeof(struct MemoryChunk);
}
void* Malloc(size_t size)
{
struct MemoryChunk *freeChunk = 0;
for(struct MemoryChunk* chunk = First; chunk != 0 && freeChunk == 0; chunk = chunk->Next)
{
if(chunk->Size > size && !chunk->Allocated)
freeChunk = chunk;
}
if(freeChunk == 0)
return 0;
if(freeChunk->Size >= size + sizeof(struct MemoryChunk))
{
struct MemoryChunk* temp = (struct MemoryChunk*)((size_t)freeChunk + sizeof(struct MemoryChunk) + size);
temp->Allocated = false;
temp->Size = freeChunk->Size - size - sizeof(struct MemoryChunk);
temp->Prev = freeChunk;
temp->Next = freeChunk->Next;
if(temp->Next != 0)
temp->Next->Prev = temp;
freeChunk->Size = size;
freeChunk->Next = temp;
}
freeChunk->Allocated = true;
return (void*)(((size_t) freeChunk) + sizeof(struct MemoryChunk));
}
void Free(void* ptr)
{
struct MemoryChunk* chunk = (struct MemoryChunk*)((size_t) ptr - sizeof(struct MemoryChunk));
chunk->Allocated = false;
if(chunk->Prev != 0 && !chunk->Prev->Allocated)
{
chunk->Prev->Next = chunk->Next;
}
}