refactor(allocator): made seperate allocator function for malloc

This commit is contained in:
Mineplay 2025-04-19 06:37:17 -05:00
parent bba9be1c9c
commit 00b6aaa735
2 changed files with 26 additions and 6 deletions

View file

@ -24,10 +24,13 @@
#define HALLOCY_ALLOCATOR #define HALLOCY_ALLOCATOR
#include <stddef.h> #include <stddef.h>
#include <stdbool.h>
#include "../Utils/Error.h" #include "../Utils/Error.h"
void *hallocy_malloc(size_t size); void *hallocy_allocate(size_t size, bool zero_memory);
static inline void *hallocy_malloc(size_t size) { return hallocy_allocate(size, false); }
HallocyError hallocy_free(void *pointer); HallocyError hallocy_free(void *pointer);
#endif #endif

View file

@ -21,8 +21,7 @@
* ----------------------------------------------------------------------------- * -----------------------------------------------------------------------------
*/ */
#include "../../Include/Hallocy/Core/Allocator.h" #include "../../Include/Hallocy/Core/Allocator.h"
#include "../../Include/Hallocy/Core/Memory.h"
#include <stdbool.h>
#if defined(_WIN32) #if defined(_WIN32)
#include <windows.h> #include <windows.h>
@ -70,7 +69,7 @@ static BOOL CALLBACK hallocy_initialize_mutex(PINIT_ONCE init_once, PVOID parame
} }
#endif #endif
void *hallocy_malloc(size_t size) { void *hallocy_allocate(size_t size, bool zero_memory) {
if (page_size == 0) { if (page_size == 0) {
#if defined(_WIN32) #if defined(_WIN32)
SYSTEM_INFO system_info; SYSTEM_INFO system_info;
@ -102,6 +101,10 @@ void *hallocy_malloc(size_t size) {
} }
memory_pointer->next = NULL; memory_pointer->next = NULL;
if (zero_memory) {
hallocy_set_memory(memory_pointer + 1, 0, aligned_size - sizeof(HallocyMemoryHeader));
}
return (void*)(memory_pointer + 1); return (void*)(memory_pointer + 1);
} }
@ -114,7 +117,12 @@ void *hallocy_malloc(size_t size) {
hallocy_heap = GetProcessHeap(); hallocy_heap = GetProcessHeap();
} }
memory_pointer = HeapAlloc(hallocy_heap, 0, aligned_size); if (zero_memory) {
memory_pointer = HeapAlloc(hallocy_heap, HEAP_ZERO_MEMORY, aligned_size);
} else {
memory_pointer = HeapAlloc(hallocy_heap, 0, aligned_size);
}
if (memory_pointer == NULL) { if (memory_pointer == NULL) {
return NULL; return NULL;
} }
@ -162,6 +170,10 @@ void *hallocy_malloc(size_t size) {
#endif #endif
memory_pointer->next = NULL; memory_pointer->next = NULL;
if (zero_memory) {
hallocy_set_memory(memory_pointer + 1, 0, aligned_size - sizeof(HallocyMemoryHeader));
}
return (void*)(memory_pointer + 1); return (void*)(memory_pointer + 1);
} }
@ -174,7 +186,12 @@ void *hallocy_malloc(size_t size) {
hallocy_heap = GetProcessHeap(); hallocy_heap = GetProcessHeap();
} }
memory_pointer = HeapAlloc(hallocy_heap, 0, aligned_size); if (zero_memory) {
memory_pointer = HeapAlloc(hallocy_heap, HEAP_ZERO_MEMORY, aligned_size);
} else {
memory_pointer = HeapAlloc(hallocy_heap, 0, aligned_size);
}
if (memory_pointer == NULL) { if (memory_pointer == NULL) {
return NULL; return NULL;
} }