From 776bee499d5ee14527b231b8cde3ecc186692711 Mon Sep 17 00:00:00 2001 From: Mineplay Date: Fri, 11 Apr 2025 16:16:46 -0500 Subject: [PATCH] perf(allocator): made allocation size align with page size of system --- Src/Hallocy/Allocator.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/Src/Hallocy/Allocator.c b/Src/Hallocy/Allocator.c index 17bbc6a..be9569d 100644 --- a/Src/Hallocy/Allocator.c +++ b/Src/Hallocy/Allocator.c @@ -29,12 +29,26 @@ #include #endif +static size_t page_size = 0; + void *hallocy_malloc(size_t size) { + if (page_size == 0) { + #if defined(_WIN32) + SYSTEM_INFO system_info; + GetSystemInfo(&system_info); + + page_size = system_info.dwPageSize; + #elif defined(__linux__) + page_size = sysconf(_SC_PAGESIZE); + #endif + } + + size_t aligned_size = page_size * ((size / page_size) + 1); void *memory_pointer = NULL; #if defined(_WIN32) - memory_pointer = VirtualAlloc(NULL, size, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE); + memory_pointer = VirtualAlloc(NULL, aligned_size, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE); #elif defined(__linux__) - memory_pointer = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); + memory_pointer = mmap(NULL, aligned_size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); #endif return memory_pointer;