1

'better-fit' はかなり一般的に使われていると聞いたことがありますが、オンラインであまり読んでいないようです。ヒープ アロケーターが使用する最も一般的に使用される/最も効率的なポリシーと考えられるものは何ですか。

(私の語彙に欠陥があるかもしれないことは認めます。「ポリシー」と言うときは、「最適」、「最初に適合」、「次の適合」などを意味します)

編集:「より適切な」ヒープポリシーとダグラスの戦略(http://gee.cs.oswego.edu/dl/html/malloc.html)の比較にも特に興味があります。Doug は一種のベスト フィットを使用しますが、彼のアプローチはインデックス ビンを使用しますが、ベター フィットはデカルト ツリーを使用します。

4

1 に答える 1

2

C プログラミング環境は、オペレーティング システムに付属する標準 C ライブラリによって提供される malloc 実装を使用します。Doug Lea のメモリ アロケータ( dlmallocと呼ばれる) の概念は、UNIX システム上のほとんどのメモリ アロケータで何らかの形で最も広く使用されています。dlmallocは、さまざまなサイズのビンを使用してオブジェクトを収容します。オブジェクト サイズに最も近いビンを使用して、オブジェクトを割り当てます。

FreeBSD は、現在のマルチコア システムで使用する場合に優れたパフォーマンス特性を提供する、同時実行およびスレッドセーフになるように設計されたjemallocと呼ばれる新しいマルチスレッド メモリ アロケータを使用します。古い malloc と新しいマルチスレッドの malloc の比較については、こちらを参照してください。マルチスレッド化されていますが、異なるサイズのチャンクの概念を使用して、オブジェクトのサイズに応じてオブジェクトを収容します (オブジェクトのサイズに最も近いチャンクがオブジェクトの割り当てに使用されます)。

UNIX カーネル内で最も一般的なメモリ アロケータは、Sun Microsystems によって導入されたスラブ アロケータです。スラブ アロケータは、スラブと呼ばれる大きなメモリ チャンクを使用します。これらのスラブは、さまざまなサイズのオブジェクト (またはプール) のキャッシュに分割されます。各オブジェクトは、そのサイズに最も近いオブジェクトを含むキャッシュから割り当てられます。

お気づきのとおり、上記のビン/チャンク/スラブ キャッシュは最適なアルゴリズムの形式にすぎません。そのため、「最適な」アルゴリズムが最も広く使用されている malloc アルゴリズムの 1 つであると簡単に推測できます (ただし、メモリ アロケータは他の重要な点で異なります)。

于 2010-06-01T04:33:10.423 に答える