diff --git a/Src/Hallocy/Allocator.c b/Src/Hallocy/Allocator.c index be9569d..6d56c05 100644 --- a/Src/Hallocy/Allocator.c +++ b/Src/Hallocy/Allocator.c @@ -29,6 +29,11 @@ #include #endif +typedef struct HallocyMemoryHeader { + size_t size; + struct HallocyMemoryHeader *next; +} HallocyMemoryHeader; + static size_t page_size = 0; void *hallocy_malloc(size_t size) { @@ -43,13 +48,16 @@ void *hallocy_malloc(size_t size) { #endif } - size_t aligned_size = page_size * ((size / page_size) + 1); - void *memory_pointer = NULL; + size_t aligned_size = page_size * (((size + sizeof(HallocyMemoryHeader)) / page_size) + 1); + HallocyMemoryHeader *memory_pointer = NULL; #if defined(_WIN32) - memory_pointer = VirtualAlloc(NULL, aligned_size, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE); + memory_pointer = (HallocyMemoryHeader*)VirtualAlloc(NULL, aligned_size, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE); #elif defined(__linux__) - memory_pointer = mmap(NULL, aligned_size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); + memory_pointer = (HallocyMemoryHeader*)mmap(NULL, aligned_size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); #endif - return memory_pointer; + memory_pointer->size = aligned_size; + memory_pointer->next = NULL; + + return (void*)(memory_pointer + 1); } \ No newline at end of file