2012-05-11 2 views
3

, когда мы говорим о архитектуре памяти Windows => мы говорим о диспетчере виртуальной памяти, который «дает» кусок памяти в кучу диспетчера приложений, которые выделяют размер памяти, заданный приложением.Архитектура памяти кучи .net

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

Но в .net => это .net удалось отвал «просить» памяти у менеджера виртуальной памяти (я почти уверен, что это так), или есть какой-то слой между управляемую кучу .net и диспетчер виртуальной памяти?

(этот вопрос не имеет никакого отношения к GC)

ответ

3

Среда выполнения .NET в основном действует как менеджер памяти для управляемой кучи. Таким образом, каждый раз, когда вы новичок в объекте, он либо продвигает указатель на кучу gen0 GC (что может вызвать сборку), либо выделяет патрон в большой куче объектов. Последняя похожа на обычную кучу CRT, поскольку она использует бесплатный список.

Сама куча GC хранится в сегментах, которые выделяются/освобождаются ОС по мере необходимости. Это означает, что использование управляемой памяти обычно не отражается сразу на уровне процесса.

Вы можете проверить, как управляемая куча построена из разных сегментов через расширение отладчика SOS, которое может быть загружено в WinDbg (оно также может быть загружено в VS, но опыт немного груб, если вы спросите меня).

Есть две книги, которые приходят на ум: CLR via C# и Shared Source CLI. Они оба в некоторой степени охватывают это.

+0

+1 для разговора о SOS. PSCOR2 и PSCOR4 неплохо подходят для проверки кучи. – GregC

+1

@GregC: Они есть. PSSCOR по существу построен из ветки SOS-источников, поэтому они разделяют много. –

Смежные вопросы