diff options
author | Kae <80987908+Novaenia@users.noreply.github.com> | 2024-07-28 10:54:26 +1000 |
---|---|---|
committer | Kae <80987908+Novaenia@users.noreply.github.com> | 2024-07-28 10:54:26 +1000 |
commit | 8b1a2d6f0c9a1592a5c550ab23f6bf949ce65fc4 (patch) | |
tree | f743710a6f9d3c4177483a5134a6889a3bd3f097 /source/core/StarMemory.cpp | |
parent | 539819003051a47b86c61447e0e59044b0775b95 (diff) |
add 2 new allocators, currently using rpmalloc on Windows (mimalloc unused for now)
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 |