From 8b1a2d6f0c9a1592a5c550ab23f6bf949ce65fc4 Mon Sep 17 00:00:00 2001 From: Kae <80987908+Novaenia@users.noreply.github.com> Date: Sun, 28 Jul 2024 10:54:26 +1000 Subject: add 2 new allocators, currently using rpmalloc on Windows (mimalloc unused for now) --- source/core/StarMemory.cpp | 49 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) (limited to 'source/core/StarMemory.cpp') diff --git a/source/core/StarMemory.cpp b/source/core/StarMemory.cpp index 9e73eb6..6ecc509 100644 --- a/source/core/StarMemory.cpp +++ b/source/core/StarMemory.cpp @@ -2,6 +2,18 @@ #ifdef STAR_USE_JEMALLOC #include "jemalloc/jemalloc.h" +#elif STAR_USE_MIMALLOC +#include "mimalloc.h" +#elif STAR_USE_RPMALLOC +#include "rpnew.h" + +bool rpm_linker_ref() { + rpmalloc_linker_reference(); + return true; +} + +static bool _rpm_linker_ref = rpm_linker_ref(); + #endif namespace Star { @@ -42,6 +54,38 @@ namespace Star { ::sdallocx(ptr, size, 0); } #endif +#elif STAR_USE_MIMALLOC + void* malloc(size_t size) { + return mi_malloc(size); + } + + void* realloc(void* ptr, size_t size) { + return mi_realloc(ptr, size); + } + + void free(void* ptr) { + return mi_free(ptr); + } + + void free(void* ptr, size_t size) { + return mi_free_size(ptr, size); + } +#elif STAR_USE_RPMALLOC + void* malloc(size_t size) { + return rpmalloc(size); + } + + void* realloc(void* ptr, size_t size) { + return rprealloc(ptr, size); + } + + void free(void* ptr) { + return rpfree(ptr); + } + + void free(void* ptr, size_t) { + return rpfree(ptr); + } #else void* malloc(size_t size) { return ::malloc(size); @@ -62,6 +106,9 @@ namespace Star { } +#ifndef STAR_USE_RPMALLOC + + void* operator new(std::size_t size) { auto ptr = Star::malloc(size); if (!ptr) @@ -110,3 +157,5 @@ void operator delete(void* ptr, std::size_t size) noexcept { void operator delete[](void* ptr, std::size_t size) noexcept { Star::free(ptr, size); } + +#endif \ No newline at end of file -- cgit v1.2.3