私はガベージコレクションについて読んできましたが、すべての説明は、オブジェクトの保持、割り当て、および記憶を行うヒープを既に実装していることを前提としています。
管理されたヒープに関する経典を見つけるのは難しいと思います。誰かがいくつかのアルゴリズム、データ構造、およびその他のリソースについて言及できますか?
私はガベージコレクションについて読んできましたが、すべての説明は、オブジェクトの保持、割り当て、および記憶を行うヒープを既に実装していることを前提としています。
管理されたヒープに関する経典を見つけるのは難しいと思います。誰かがいくつかのアルゴリズム、データ構造、およびその他のリソースについて言及できますか?
ここであなたが何を求めているのかよくわかりません.ヒープの管理は実際のガベージコレクションアルゴリズムとかなり密接に絡み合っているので、あなたが言及した参照がヒープがどのように機能するかを説明していないことに少し驚いています.管理されます。読んだ説明を指摘していただけると助かります。
あなたの質問の根本は、メモリ マネージャーが割り当てられたすべてのオブジェクトを実際に追跡し、参照されなくなったオブジェクトを見つける方法にあると思います。これを行う最も簡単な方法は、割り当てられたオブジェクトのリンクされたリストを使用することです。リスト内の次のオブジェクトへのポインター用の余分なスペースが各オブジェクトに割り当てられます。
ガベージ コレクションされていないメモリ マネージャーは、通常、解放されたオブジェクトのリストも保持しますが、ガベージ コレクションされたメモリ マネージャーは、特定のオブジェクトを指すすべての参照を識別できるため、多くの場合これを回避できます。オブジェクトをメモリ内でシフトすることにより、メモリを圧縮します。したがって、空きメモリの連続したブロックが常に利用可能であり、空きメモリの先頭へのベース ポインタを保持するだけであると想定できます。
この記事は、.NET でのメモリ管理の一般原則を説明する出発点として役立ちます。