2012-05-11 6 views
3

우리가 Windows 메모리 아키텍처에 대해 이야기 할 때 우리는 응용 프로그램이 요청하는 메모리 크기를 할당하는 응용 프로그램 관리자 힙에 메모리 덩어리를주는 가상 메모리 관리자에 대해 이야기합니다..net 힙 메모리의 아키텍처

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

그러나 .NET =>는 .NET은 힙 (내가이 경우 거의 확신) 가상 메모리 관리자에서 메모리를 '요구'또는 일부 층 사이가 관리입니다에 닷넷 관리 힙 및 가상 메모리 관리자?

답변

3

.NET 런타임은 기본적으로 관리되는 힙 메모리 관리자의 역할 (이 질문은 GC에 아무 관련이 없습니다). 따라서 새로운 개체가 생길 때마다 gen0 GC 힙 (컬렉션을 트리거 할 수 있음)에 포인터를 올리거나 Large Object Heap에 척을 할당합니다. 후자는 무료 목록을 사용한다는 점에서 일반 CRT 힙과 유사합니다.

GC 힙 자체는 필요에 따라 OS에 할당/해제되는 세그먼트에 저장됩니다. 즉, 관리되는 메모리 사용은 일반적으로 프로세스 수준에 즉시 반영되지 않습니다.

WinDbg에서로드 할 수있는 SOS 디버거 확장을 통해 다른 세그먼트에서 관리되는 힙을 빌드하는 방법을 검사 할 수 있습니다 (VS에서도로드 할 수 있지만 나에게 묻는다면 약간의 경험이 없습니다).

염두에 두 권의 책인 CLR via C#Shared Source CLI이 있습니다. 그들은 둘 다 이것을 어느 정도 커버합니다.

+0

+1 SOS에 대해 이야기합니다. PSCOR2와 PSCOR4는 힙 검사에도 꽤 좋습니다. – GregC

+1

@ GregC : 그렇습니다. PSSCOR는 기본적으로 SOS 소스의 한 지점에서 만들어 지므로 많이 공유합니다. –