aboutsummaryrefslogtreecommitdiff
path: root/src/zencore/include
diff options
context:
space:
mode:
authorStefan Boberg <[email protected]>2026-03-22 10:57:12 +0100
committerGitHub Enterprise <[email protected]>2026-03-22 10:57:12 +0100
commitf9e56609401e505c835796726eff35e650810fff (patch)
tree1e001f9754e3cd417936a1f2ebfd289db9333975 /src/zencore/include
parentzen hub command (#877) (diff)
downloadzen-f9e56609401e505c835796726eff35e650810fff.tar.xz
zen-f9e56609401e505c835796726eff35e650810fff.zip
Upgrade mimalloc to v2.2.7 and log active memory allocator (#876)
- Upgrade mimalloc from v2.1.2 to v2.2.7. Note that mimalloc is no longer the default allocator so this only impacts users who somehow opt into mimalloc via `--malloc=mimalloc` or compile with different defaults - Add all available mimalloc versions (1.6.7–3.2.8) to the package definition for testing - Log the active memory allocator (with version where available) at server startup - Annotate vendored rpmalloc with its source commit and version ## Notable changes in mimalloc 2.1.2 → 2.2.7 - **Memory release fix** (2.2.4): fix case where OS memory was not always fully released - **Race condition fix** (2.2.6): fixed rare race condition and potential buffer overflow in debug statistics - **Windows arm64 support** (2.1.9) - **Guarded build** (2.1.9): new build mode that places OS guard pages behind objects to catch buffer overflows - **THP awareness** (2.2.6): auto-detects transparent huge pages and adjusts purge size to avoid fragmentation - **Faster TLS access on Windows** (2.2.6) - **Improved calloc and aligned allocation performance** (2.2.6) - **New diagnostic APIs** (2.2.2): `mi_options_print`, `mi_arenas_print`, `mi_stat_get` / `mi_stat_get_json` - **macOS**: use `MADV_FREE_REUSABLE` for better memory behavior (2.2.4) - **Build fixes**: Android, Xbox, musl, mingw, arm32, Debian 32-bit, non-BMI1 x64 systems ## Allocator logging Added `FMalloc::GetName()` pure virtual so the server logs which allocator is active at startup: ``` zenserver - memory allocator: mimalloc 2.2.7 ``` Allocator names include version where available: - `mimalloc 2.2.7` (runtime version via `mi_version()`) - `rpmalloc 1.5.0-dev.20250810` (ad-hoc version from vendored develop branch commit) - `ansi`, `stomp` (no version info available) ## Test plan - [x] Builds successfully on Windows (release) - [x] Verify server startup log shows allocator name - [x] Test with `--malloc=mimalloc` (default) and `--malloc=rpmalloc` - [x] Run test suites to check for regressions
Diffstat (limited to 'src/zencore/include')
-rw-r--r--src/zencore/include/zencore/memory/fmalloc.h2
-rw-r--r--src/zencore/include/zencore/memory/mallocansi.h13
-rw-r--r--src/zencore/include/zencore/memory/mallocmimalloc.h19
-rw-r--r--src/zencore/include/zencore/memory/mallocrpmalloc.h19
-rw-r--r--src/zencore/include/zencore/memory/mallocstomp.h3
5 files changed, 31 insertions, 25 deletions
diff --git a/src/zencore/include/zencore/memory/fmalloc.h b/src/zencore/include/zencore/memory/fmalloc.h
index c50a9729c..8ce4f7acd 100644
--- a/src/zencore/include/zencore/memory/fmalloc.h
+++ b/src/zencore/include/zencore/memory/fmalloc.h
@@ -151,6 +151,8 @@ public:
virtual void Trim(bool bTrimThreadCaches);
+ virtual const char* GetName() const = 0;
+
virtual void OutOfMemory(size_t Size, uint32_t Alignment);
};
diff --git a/src/zencore/include/zencore/memory/mallocansi.h b/src/zencore/include/zencore/memory/mallocansi.h
index 510695c8c..cbc69caed 100644
--- a/src/zencore/include/zencore/memory/mallocansi.h
+++ b/src/zencore/include/zencore/memory/mallocansi.h
@@ -20,12 +20,13 @@ class FMallocAnsi final : public FMalloc
public:
FMallocAnsi();
- virtual void* Malloc(size_t Size, uint32_t Alignment) override;
- virtual void* TryMalloc(size_t Size, uint32_t Alignment) override;
- virtual void* Realloc(void* Ptr, size_t NewSize, uint32_t Alignment) override;
- virtual void* TryRealloc(void* Ptr, size_t NewSize, uint32_t Alignment) override;
- virtual void Free(void* Ptr) override;
- virtual bool GetAllocationSize(void* Original, size_t& SizeOut) override;
+ virtual void* Malloc(size_t Size, uint32_t Alignment) override;
+ virtual void* TryMalloc(size_t Size, uint32_t Alignment) override;
+ virtual void* Realloc(void* Ptr, size_t NewSize, uint32_t Alignment) override;
+ virtual void* TryRealloc(void* Ptr, size_t NewSize, uint32_t Alignment) override;
+ virtual void Free(void* Ptr) override;
+ virtual bool GetAllocationSize(void* Original, size_t& SizeOut) override;
+ virtual const char* GetName() const override;
};
} // namespace zen
diff --git a/src/zencore/include/zencore/memory/mallocmimalloc.h b/src/zencore/include/zencore/memory/mallocmimalloc.h
index 759eeb4a6..aa11d51d7 100644
--- a/src/zencore/include/zencore/memory/mallocmimalloc.h
+++ b/src/zencore/include/zencore/memory/mallocmimalloc.h
@@ -20,15 +20,16 @@ class FMallocMimalloc final : public FMalloc
{
public:
FMallocMimalloc();
- virtual void* Malloc(size_t Size, uint32_t Alignment) override;
- virtual void* TryMalloc(size_t Size, uint32_t Alignment) override;
- virtual void* Realloc(void* Ptr, size_t NewSize, uint32_t Alignment) override;
- virtual void* TryRealloc(void* Ptr, size_t NewSize, uint32_t Alignment) override;
- virtual void Free(void* Ptr) override;
- virtual void* MallocZeroed(size_t Count, uint32_t Alignment) override;
- virtual void* TryMallocZeroed(size_t Count, uint32_t Alignment) override;
- virtual bool GetAllocationSize(void* Original, size_t& SizeOut) override;
- virtual void Trim(bool bTrimThreadCaches) override;
+ virtual void* Malloc(size_t Size, uint32_t Alignment) override;
+ virtual void* TryMalloc(size_t Size, uint32_t Alignment) override;
+ virtual void* Realloc(void* Ptr, size_t NewSize, uint32_t Alignment) override;
+ virtual void* TryRealloc(void* Ptr, size_t NewSize, uint32_t Alignment) override;
+ virtual void Free(void* Ptr) override;
+ virtual void* MallocZeroed(size_t Count, uint32_t Alignment) override;
+ virtual void* TryMallocZeroed(size_t Count, uint32_t Alignment) override;
+ virtual bool GetAllocationSize(void* Original, size_t& SizeOut) override;
+ virtual void Trim(bool bTrimThreadCaches) override;
+ virtual const char* GetName() const override;
};
} // namespace zen
diff --git a/src/zencore/include/zencore/memory/mallocrpmalloc.h b/src/zencore/include/zencore/memory/mallocrpmalloc.h
index be2627b2d..718b7c095 100644
--- a/src/zencore/include/zencore/memory/mallocrpmalloc.h
+++ b/src/zencore/include/zencore/memory/mallocrpmalloc.h
@@ -21,15 +21,16 @@ class FMallocRpmalloc final : public FMalloc
public:
FMallocRpmalloc();
~FMallocRpmalloc();
- virtual void* Malloc(size_t Size, uint32_t Alignment) override;
- virtual void* TryMalloc(size_t Size, uint32_t Alignment) override;
- virtual void* Realloc(void* Ptr, size_t NewSize, uint32_t Alignment) override;
- virtual void* TryRealloc(void* Ptr, size_t NewSize, uint32_t Alignment) override;
- virtual void Free(void* Ptr) override;
- virtual void* MallocZeroed(size_t Count, uint32_t Alignment) override;
- virtual void* TryMallocZeroed(size_t Count, uint32_t Alignment) override;
- virtual bool GetAllocationSize(void* Original, size_t& SizeOut) override;
- virtual void Trim(bool bTrimThreadCaches) override;
+ virtual void* Malloc(size_t Size, uint32_t Alignment) override;
+ virtual void* TryMalloc(size_t Size, uint32_t Alignment) override;
+ virtual void* Realloc(void* Ptr, size_t NewSize, uint32_t Alignment) override;
+ virtual void* TryRealloc(void* Ptr, size_t NewSize, uint32_t Alignment) override;
+ virtual void Free(void* Ptr) override;
+ virtual void* MallocZeroed(size_t Count, uint32_t Alignment) override;
+ virtual void* TryMallocZeroed(size_t Count, uint32_t Alignment) override;
+ virtual bool GetAllocationSize(void* Original, size_t& SizeOut) override;
+ virtual void Trim(bool bTrimThreadCaches) override;
+ virtual const char* GetName() const override;
};
} // namespace zen
diff --git a/src/zencore/include/zencore/memory/mallocstomp.h b/src/zencore/include/zencore/memory/mallocstomp.h
index 5d83868bb..ed0617c95 100644
--- a/src/zencore/include/zencore/memory/mallocstomp.h
+++ b/src/zencore/include/zencore/memory/mallocstomp.h
@@ -92,7 +92,8 @@ public:
* @param SizeOut - If possible, this value is set to the size of the passed in pointer
* @return true if succeeded
*/
- virtual bool GetAllocationSize(void* Original, size_t& SizeOut) override;
+ virtual bool GetAllocationSize(void* Original, size_t& SizeOut) override;
+ virtual const char* GetName() const override;
};
} // namespace zen