diff options
Diffstat (limited to 'source/core/StarMemory.cpp')
-rw-r--r-- | source/core/StarMemory.cpp | 49 |
1 files changed, 49 insertions, 0 deletions
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 |