演習として、メモリ マネージャを作成しています。つまり、malloc、realloc、および free (または new と delete) を実装するコードです。私の言語 Delphiの RTL では、RTL のメモリ マネージャを簡単に置き換えることができます。C++ を使用している人にとって、これは new と delete のオーバーライドに似ていますが、それよりも低レベルです (言語機能ではなく、RTL 自体にフックされます)。他の人が持っている高品質のアプローチに関するリソースを探しています。同じ問題に取りかかりました。
FastMM4 (非常に複雑)、Doug Lea の allocator、Buddy、JeMalloc、TcMalloc、およびHoardを含む、いくつかのメモリ管理アルゴリズムと実装を認識しています。以下についての情報を探しています。
既知の推奨されるアルゴリズム: 上記以外に公開されている高品質のアルゴリズムは?
高度にスレッド化されたアプリケーション用に調整された特定のアルゴリズムはありますか? つまり、割り当てまたは解放のためにロックされたポイントで高いスレッド競合が発生する可能性がある場所、およびメモリが 1 つのスレッドで割り当てられても別のスレッドで割り当て解除される可能性がある場所はどこですか? ほとんどのアルゴリズム (Hoard、JeMalloc、および TcMalloc の注目すべき例外を除く) は、シングルスレッド作業用に設計されているようであり、スレッド認識は、適切な時点でロックまたはその他の同期があるという点でスレッドセーフのみであり、特別な設計はありません。
主要ベンダーは何を使用していますか? Delphi および C++ Builder は文書化され ていますが、MS VC++、.Net、または Objective C で使用されている実装に関する情報は見つかりません (たとえば、すべての文書は高レベルのよう
NSAutoReleasePool
です。Linux は Buddy を使用しているようです。)これらのベンダーは、Delphi のように RTL をフックすることを許可していないようです。それらの実装について読むことに非常に興味があります。