=>我們在談論虛擬內存管理器,它將「內存塊」賦予應用程序管理器堆,以分配應用程序請求的內存大小。當我們談論windows內存體系結構時,.net堆內存的體系結構
(http://msdn.microsoft.com/en-us/library/ms810466.aspx)
但在.NET =>是.NET託管堆是「詢問」存儲器從虛擬內存管理器(我幾乎可以肯定是這種情況),或之間有一定層.net託管堆和虛擬內存管理器?
(這個問題沒有連接到GC)
=>我們在談論虛擬內存管理器,它將「內存塊」賦予應用程序管理器堆,以分配應用程序請求的內存大小。當我們談論windows內存體系結構時,.net堆內存的體系結構
(http://msdn.microsoft.com/en-us/library/ms810466.aspx)
但在.NET =>是.NET託管堆是「詢問」存儲器從虛擬內存管理器(我幾乎可以肯定是這種情況),或之間有一定層.net託管堆和虛擬內存管理器?
(這個問題沒有連接到GC)
.NET運行庫基本上充當用於管理堆存儲器管理器。所以每當你新建一個對象時,它都會在gen0 GC heap(可能會觸發一個集合)或者在Large Object Heap上分配一個chuck。後者與常規CRT堆相似,因爲它使用空閒列表。
GC堆本身存儲在根據需要分配/釋放到操作系統的段中。這意味着管理內存使用情況通常不會立即反映在進程級別上。
您可以通過可以在WinDbg中加載的SOS調試器擴展(它也可以在VS中加載,但是如果您問我的經驗有點粗糙)來檢查託管堆是如何從不同的段構建的。
想到兩本書:CLR via C#和Shared Source CLI。它們在一定程度上涵蓋了這一點。
+1爲談論SOS。 PSCOR2和PSCOR4也非常適合堆檢測。 – GregC
@GregC:他們是。 PSSCOR基本上是由SOS資源的一個分支構建的,所以它們分享了很多。 –