.net堆内存的体系结构

时间:2012-05-11 19:18:48

标签: .net memory-management

当我们谈论windows内存架构=>我们讨论的是虚拟内存管理器,它为应用程序管理器堆“提供”大量内存,分配应用程序所要求的内存大小。

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

但是在.net =>是.net托管堆是从虚拟内存管理器'询问'内存(我几乎可以肯定是这种情况)或.net托管堆和虚拟内存管理器之间有一些层?

(此问题与GC无关)

1 个答案:

答案 0 :(得分:3)

.NET运行时基本上充当托管堆的内存管理器。因此,每次创建一个对象时,它都会将指针前进到gen0 GC堆上(这可能会触发一个集合)或者在大对象堆上分配一个chuck。后者类似于常规CRT堆,因为它使用空闲列表。

GC堆本身存储在根据需要分配/释放到OS的段中。这意味着托管内存使用通常不会立即反映在进程级别上。

您可以通过可以在WinDbg中加载的SOS调试器扩展来检查如何从不同的段构建托管堆(它也可以在VS中加载,但如果您问我,这种体验有点粗糙)。

有两本书可供考虑:CLR via C#Shared Source CLI。它们都在一定程度上涵盖了这一点。