Jemallocator: Rust jemalloc メモリアロケータ代替案
Tip
デフォルトアロケータは、時折メモリの解放が遅延する場合があります。グローバルアロケータとして jemallocator をデフォルトアロケータの代替として使用することを推奨します。
jemallocator は、jemalloc メモリアロケータにリンクするライブラリであり、アロケータ API を実装し #[global_allocator] に設定可能な Jemalloc ユニット型を提供します。
tikv-jemallocator は jemallocator の後継プロジェクトです。両クレートは名称以外完全に同一です。新規プロジェクトでは tikv-xxx バージョンの使用を推奨します。
jemalloc エコシステム
jemalloc サポートエコシステムは以下のクレートで構成されます:
- tikv-jemalloc-sys:jemalloc のビルドとリンクを行い、生の C バインディングを公開します。
- tikv-jemallocator:
GlobalAllocおよびAllocトレイトを実装したJemalloc型を提供します。 - tikv-jemalloc-ctl:jemalloc の制御および内省 API の高レベルラッパー(
mallctl*()関数群とMALLCTL NAMESPACE)。
使用方法
依存関係の追加
tikv-jemallocator を使用するには、依存関係として追加します:
グローバルアロケータの設定
tikv_jemallocator::Jemalloc をグローバルアロケータとして設定するには、以下のコードをプロジェクトに追加します:
以上です!この静的変数を定義すると、同一プログラム内の Rust コードによる全てのメモリ割り当てに jemalloc が使用されます。
利点
jemalloc は汎用 malloc 実装であり、以下の点に重点を置いています:
- メモリフラグメンテーションの低減
- 高並行シナリオにおけるスケーラビリティ
- 豊富な内省機能と制御機能の提供
以下のシナリオで特に有用です:
- 長時間稼働するアプリケーション
- メモリ集約型ワークロード
- きめ細かいメモリ管理を必要とする高性能サービス
互換性に関する注意
jemalloc は MSVC ターゲット環境をサポートしておらず、Windows で MSVC ツールチェインを使用する場合は利用できません。これがサンプルコードに cfg(not(target_env = "msvc")) 条件を含める理由です。