Веб-сайт самохостера Lotigara

summaryrefslogtreecommitdiff
path: root/source/core/StarMemory.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/core/StarMemory.cpp')
-rw-r--r--source/core/StarMemory.cpp49
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