Jemallocator: Rust jemalloc 記憶體分配器

tikv-jemallocatortikv-jemallocator
TIP

預設分配器有時會出現無法及時釋放記憶體的情況,推薦使用jemallocator

jemallocator 是一個與 jemalloc 記憶體分配器連結的函式庫,提供了 Jemalloc 單元型別,該型別實作了分配器 API 並可設定為 #[global_allocator]

tikv-jemallocatorjemallocator 的後繼專案。這兩個 crate 除了名稱不同外完全相同。對於新專案,建議使用 tikv-xxx 版本。

jemalloc 生態系統

jemalloc 支援生態系統由以下 crate 組成:

  • tikv-jemalloc-sys:建構並連結到 jemalloc,暴露對它的原始 C 綁定。
  • tikv-jemallocator:提供實作了 GlobalAllocAlloc trait 的 Jemalloc 型別。
  • tikv-jemalloc-ctl:jemalloc 控制與自省 API 的高階封裝(mallctl*() 函式家族與 MALLCTL NAMESPACE)。

使用方法

添加依賴

要使用 tikv-jemallocator,將它添加為依賴:

[dependencies]

[target.'cfg(not(target_env = "msvc"))'.dependencies]
tikv-jemallocator = "0.5"

設定為全域分配器

要將 tikv_jemallocator::Jemalloc 設定為全域分配器,將以下程式碼添加到您的專案中:

#[cfg(not(target_env = "msvc"))]
use tikv_jemallocator::Jemalloc;

#[cfg(not(target_env = "msvc"))]
#[global_allocator]
static GLOBAL: Jemalloc = Jemalloc;

就是這樣!一旦定義了這個靜態變數,jemalloc 將用於同一程式中 Rust 程式碼請求的所有記憶體分配。

優勢

jemalloc 是一個通用目的的 malloc 實作,專注於:

  • 減少記憶體碎片
  • 高並發場景下的可擴展性
  • 提供豐富的自省與控制能力

在以下場景中特別有用:

  • 長時間運行的應用程式
  • 記憶體密集型工作負載
  • 需要細粒度記憶體管理的高效能服務

相容性說明

jemalloc 不支援 MSVC 目標環境,因此在 Windows 上使用 MSVC 工具鏈時不可用。這就是為什麼在範例程式碼中包含 cfg(not(target_env = "msvc")) 條件的原因。