perf(allocator): made allocation size align with page size of system
This commit is contained in:
parent
c48200cd52
commit
776bee499d
1 changed files with 16 additions and 2 deletions
|
|
@ -29,12 +29,26 @@
|
||||||
#include <sys/mman.h>
|
#include <sys/mman.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static size_t page_size = 0;
|
||||||
|
|
||||||
void *hallocy_malloc(size_t size) {
|
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;
|
void *memory_pointer = NULL;
|
||||||
#if defined(_WIN32)
|
#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__)
|
#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
|
#endif
|
||||||
|
|
||||||
return memory_pointer;
|
return memory_pointer;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue