当我们谈论windows内存架构=>我们讨论的是虚拟内存管理器,它为应用程序管理器堆“提供”大量内存,分配应用程序所要求的内存大小。
(http://msdn.microsoft.com/en-us/library/ms810466.aspx)
但是在.net =>是.net托管堆是从虚拟内存管理器'询问'内存(我几乎可以肯定是这种情况)或.net托管堆和虚拟内存管理器之间有一些层?
(此问题与GC无关)
答案 0 :(得分:3)
.NET运行时基本上充当托管堆的内存管理器。因此,每次创建一个对象时,它都会将指针前进到gen0 GC堆上(这可能会触发一个集合)或者在大对象堆上分配一个chuck。后者类似于常规CRT堆,因为它使用空闲列表。
GC堆本身存储在根据需要分配/释放到OS的段中。这意味着托管内存使用通常不会立即反映在进程级别上。
您可以通过可以在WinDbg中加载的SOS调试器扩展来检查如何从不同的段构建托管堆(它也可以在VS中加载,但如果您问我,这种体验有点粗糙)。
有两本书可供考虑:CLR via C#和Shared Source CLI。它们都在一定程度上涵盖了这一点。