Я не научный парень аккомпанемента. Управляемые ресурсы выделяются на "куче". Но я хотел бы знать, где неуправляемые ресурсы выделяются. Если неуправляемые ресурсы также выделяются на "куче", действительно ли это - та же "куча", используемая управляемыми ресурсами или другим?
Заранее спасибо.
Harsha
По сути, куча - это то же самое с точки зрения операционной системы: пространство памяти, назначенное процессу ОС.
Разница в том, что когда среда CLR (виртуальная машина .net) загружается внутри процесса Windows, она берет часть этой кучи и превращает ее в управляемую кучу . Это пространство памяти становится местом, где все управляемые ресурсы выделяются и известны сборщику мусора.
Например, вы можете столкнуться с ошибкой «Недостаточно памяти», если выделите большой кусок неуправляемой памяти и не хватит места для управляемой кучи. Или наоборот.
Джеффри Рихтер лучше всех объясняет. Я настоятельно рекомендую прочитать его объяснение:
Вы можете использовать службы системы .InteropServices, класс Marshal , в частности, для копирования данных между неуправляемой частью кучи и управляемой.
CLR поддерживает свои собственные кучи. Первоначально создаются две: одна просто называется управляемой кучей (или куча малых объектов), а другая - кучей больших объектов (см. Также здесь ). . Эти управляемые кучи физически отделены от собственных куч, выделенных CRT для использования с new
и malloc
.
Вы можете использовать VMMap для проверки различных куч, выделенных процессом.
В памяти. Как и любой неуправляемый процесс .. Управляемая куча явно отличается от управляемой.