Где неуправляемые ресурсы выделяются

Я не научный парень аккомпанемента. Управляемые ресурсы выделяются на "куче". Но я хотел бы знать, где неуправляемые ресурсы выделяются. Если неуправляемые ресурсы также выделяются на "куче", действительно ли это - та же "куча", используемая управляемыми ресурсами или другим?

Заранее спасибо.

Harsha

5
задан Haacked 18 May 2010 в 07:27
поделиться

3 ответа

По сути, куча - это то же самое с точки зрения операционной системы: пространство памяти, назначенное процессу ОС.

Разница в том, что когда среда CLR (виртуальная машина .net) загружается внутри процесса Windows, она берет часть этой кучи и превращает ее в управляемую кучу . Это пространство памяти становится местом, где все управляемые ресурсы выделяются и известны сборщику мусора.

Например, вы можете столкнуться с ошибкой «Недостаточно памяти», если выделите большой кусок неуправляемой памяти и не хватит места для управляемой кучи. Или наоборот.

Джеффри Рихтер лучше всех объясняет. Я настоятельно рекомендую прочитать его объяснение:

Вы можете использовать службы системы .InteropServices, класс Marshal , в частности, для копирования данных между неуправляемой частью кучи и управляемой.

10
ответ дан 13 December 2019 в 19:22
поделиться

CLR поддерживает свои собственные кучи. Первоначально создаются две: одна просто называется управляемой кучей (или куча малых объектов), а другая - кучей больших объектов (см. Также здесь ). . Эти управляемые кучи физически отделены от собственных куч, выделенных CRT для использования с new и malloc .

Вы можете использовать VMMap для проверки различных куч, выделенных процессом.

0
ответ дан 13 December 2019 в 19:22
поделиться

В памяти. Как и любой неуправляемый процесс .. Управляемая куча явно отличается от управляемой.

0
ответ дан 13 December 2019 в 19:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: