3

Windowsのメモリアーキテクチャについて話すとき=>アプリケーションが要求するメモリサイズを割り当てるアプリケーションマネージャヒープにメモリのチャンクを「与える」仮想メモリマネージャについて話します。

http://msdn.microsoft.com/en-us/library/ms810466.aspx

しかし、.net =>では、.netマネージヒープは仮想メモリマネージャーにメモリを「要求」していますか(これが当てはまるとほぼ確信しています)、または.netマネージヒープと仮想メモリマネージャーの間に何らかのレイヤーがありますか?

(この質問はGCとは関係ありません)

4

1 に答える 1

3

.NET ランタイムは、基本的にマネージ ヒープのメモリ マネージャーとして機能します。したがって、新しいオブジェクトを作成するたびに、gen0 GC ヒープ (コレクションをトリガーする可能性があります) のポインターを進めるか、Large Object Heap にチャックを割り当てます。後者は、空きリストを使用するという点で通常の CRT ヒープに似ています。

GC ヒープ自体は、必要に応じて OS に割り当て/解放されるセグメントに格納されます。これは、通常、マネージ メモリの使用量がプロセス レベルにすぐに反映されないことを意味します。

WinDbg に読み込むことができる SOS デバッガー拡張機能を使用して、マネージド ヒープがさまざまなセグメントからどのように構築されているかを調べることができます (VS にも読み込むことができますが、私に尋ねると、経験は少し荒いです)。

C# による CLRShared Source CLIの 2 冊の本が思い浮かびます。どちらもこれをある程度カバーしています。

于 2012-05-11T21:30:26.033 に答える