付録A 付録

A.1. mallopt

mallopt は、プログラムによる malloc メモリアロケータの動作の変更を可能にするライブラリーコールです。

例A.1 アロケータヒューリスティック

アロケータには、昔からあるオブジェクトと最近できたオブジェクトを見分けるヒューリスティックがあります。前者に対しては mmap を割り当てようとし、後者には sbrk を割り当てようとします。
これらのヒューリスティックを上書きするには、M_MMAP_THRESHOLD を設定します。
マルチスレッドのアプリケーションでは、アロケータは arenas にある既存のロック競合に対応して複数の arenas を作成します。これより、いくつかのマルチスレッドのアプリケーションでは、メモリ使用量が増えるという代わりに、パフォーマンスが大幅に改善する場合があります。これをコントロールしておくには、mallopt インターフェースを使って作成可能な arenas 数を制限します。
アロケータには、作成できる arenas の数に限りがあります。32 ビットのターゲットの場合、2 * # のコア arenas を作成します。64 ビットターゲットの場合、8 * # コア arenas を作成します。mallopt を使うと、開発者はこれらの制限を無効に出来ます。

例A.2 mallopt

9 以上の arenas が作成されないようにするには、以下のライブラリーコールを発行します。
mallopt (M_ARENA_MAX, 8);
mallopt の最初の引数は、以下のものが可能です。
  • M_MXFAST
  • M_TRIM_THRESHOLD
  • M_TOP_PAD
  • M_MMAP_THRESHOLD
  • M_MMAP_MAX
  • M_CHECK_ACTION
  • M_PERTURB
  • M_ARENA_TEST
  • M_ARENA_MAX
上記の引数の特定の定義は、http://www.makelinux.net/man/3/M/mallopt で確認できます。

malloc_trim

malloc_trim は、アロケータに未使用のメモリをオペレーティングシステムに戻すように要求するライブラリーコールです。これは、オブジェクトが解放済みの場合、通常は自動で行われます。しかし、小さいオブジェクトを解放している場合、 glibc がメモリを即座にオペレーティングシステムに戻さないこともあります。この理由は、メモリをオペレーティングシステムからリリースさせて割り当てるのは高くつき、空きメモリは来たるべきメモリ割り当て要求を満たすために使用できるからです。

malloc_stats

malloc_stats は、アロケータの内部状態を stderr にダンプするために使用されます。mallinfo はこれに似ていますが、代わりに状態を構造体に置きます。

追加情報