Jemallocator:Rust jemalloc 記憶體分配器替代方案
Tip
預設分配器有時會出現無法及時釋放記憶體的情況,建議使用 jemallocator 作為全域分配器來替代預設分配器。
jemallocator 是一個與 jemalloc 記憶體分配器連結的函式庫,提供了 Jemalloc 單元型別,該型別實作了分配器 API 並可設定為 #[global_allocator]。
tikv-jemallocator 是 jemallocator 的後繼專案。這兩個 crate 除了名稱不同外完全相同。對於新專案,建議使用 tikv-xxx 版本。
jemalloc 生態系統
jemalloc 支援生態系統由以下 crate 組成:
- tikv-jemalloc-sys:建置並連結到 jemalloc,暴露對其的原始 C 綁定。
- tikv-jemallocator:提供實作了
GlobalAlloc和Alloctrait 的Jemalloc型別。 - tikv-jemalloc-ctl:jemalloc 控制與內省 API 的高階封裝(
mallctl*()函式家族與MALLCTL NAMESPACE)。
使用方法
添加相依性
要使用 tikv-jemallocator,請將其添加為相依性:
設定為全域分配器
要將 tikv_jemallocator::Jemalloc 設定為全域分配器,請將以下程式碼添加到您的專案中:
完成!一旦定義了這個靜態變數,jemalloc 將用於同一程式中 Rust 程式碼請求的所有記憶體分配。
優勢
jemalloc 是一個通用目的的 malloc 實作,專注於:
- 減少記憶體碎片
- 高併發場景下的可擴展性
- 提供豐富的內省與控制能力
在以下場景中特別有用:
- 長時間執行的應用程式
- 記憶體密集型工作負載
- 需要細粒度記憶體管理的高效能服務
相容性說明
jemalloc 不支援 MSVC 目標環境,因此在 Windows 上使用 MSVC 工具鏈時不可用。這就是為什麼在範例程式碼中包含 cfg(not(target_env = "msvc")) 條件的原因。