Jemallocator: Rust jemalloc メモリアロケータ

tikv-jemallocatortikv-jemallocator
TIP

デフォルトのアロケータでは、時々メモリが即座に解放されない場合があります。jemallocatorの使用を推奨します

jemallocatorはjemallocメモリアロケータとリンクするライブラリで、Jemallocユニット型を提供します。この型はアロケータAPIを実装しており、#[global_allocator]として設定可能です。

tikv-jemallocatorjemallocatorの後継プロジェクトです。両クレートは名前以外完全に同一です。新規プロジェクトではtikv-xxxバージョンの使用を推奨します。

jemallocエコシステム

jemallocサポートエコシステムは以下のクレートで構成されます:

  • tikv-jemalloc-sys:jemallocをビルド&リンクし、生のCバインディングを公開
  • tikv-jemallocatorGlobalAllocAllocトレイトを実装した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"))条件を含める理由です。