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

Tip

デフォルトアロケータは、時折メモリの解放が遅延する場合があります。グローバルアロケータとして jemallocator をデフォルトアロケータの代替として使用することを推奨します。

jemallocator は、jemalloc メモリアロケータにリンクするライブラリであり、アロケータ API を実装し #[global_allocator] に設定可能な Jemalloc ユニット型を提供します。 tikv-jemallocatorjemallocator の後継プロジェクトです。両クレートは名称以外完全に同一です。新規プロジェクトでは tikv-xxx バージョンの使用を推奨します。

jemalloc エコシステム

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

  • tikv-jemalloc-sys:jemalloc のビルドとリンクを行い、生の C バインディングを公開します。
  • tikv-jemallocatorGlobalAlloc および Alloc トレイトを実装した 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;

以上です!この静的変数を定義すると、同一プログラム内の Rust コードによる全てのメモリ割り当てに jemalloc が使用されます。

利点

jemalloc は汎用 malloc 実装であり、以下の点に重点を置いています:

  • メモリフラグメンテーションの低減
  • 高並行シナリオにおけるスケーラビリティ
  • 豊富な内省機能と制御機能の提供

以下のシナリオで特に有用です:

  • 長時間稼働するアプリケーション
  • メモリ集約型ワークロード
  • きめ細かいメモリ管理を必要とする高性能サービス

互換性に関する注意

jemalloc は MSVC ターゲット環境をサポートしておらず、Windows で MSVC ツールチェインを使用する場合は利用できません。これがサンプルコードに cfg(not(target_env = "msvc")) 条件を含める理由です。