2011-07-08 15 views
5

¿Qué es un montón no gestionado?Hep Managed y Unmanaged

Pensé que cualquier memoria basada en objetos que maneja el CLR era el montón administrado, entonces ¿por qué hablamos de un montón no administrado?

Respuesta

10

Imagine que llama a una función Win32 utilizando P/Invoke, y que asigna algo de memoria usando malloc. El recolector de basura no tiene visibilidad de esa memoria; es no administrado.

Puede o no ser el contexto en el que ha escuchado el término, por supuesto; si nos puede indicar algunos ejemplos, podemos ayudarle más.

+1

Ok, en el contexto de CLR, no hay un montón no gestionado. Por lo tanto, es solo la memoria utilizada por el código no administrado, que tiene que estar exclusivamente dispuesto para un GC completo ... ¿correcto? –

+0

@ user164184, eso suena correcto, sí. –

+2

@ user164184: No diría que * * no hay montones no administrados, más que no tenemos que preocuparnos por eso. El CLR en sí mismo sin duda usará estructuras de datos no administradas. –

6

Según John Skeet, el .net managed es el que .net administrará para usted, en el que se crean todos los objetos estándar, que normalmente no necesita preocuparse demasiado porque se gestiona.

unmanaged significa que está asignando memoria personalmente, por lo que es personalmente responsable de desasignarla, gestionarla usted mismo y realizar un seguimiento de lo que se está utilizando.

Así que sí, se gestiona la memoria de objeto (en el sentido de creación y destrucción normal de objetos, elementos que se derivan del objeto). Es la otra cosa de la que debe preocuparse: sin objetos ni memoria asignados para ellos.

0

Para comprender el Heap no gestionado en .net, necesitamos tener una idea de qué es Managed Heap.

En .NET Framework tenemos colector de basura que es inicializado por el lenguaje común routine.During su colector de basura inicialización asigna un segmento de memoria para almacenar y gestionar objetos instanciados por un código administrado .Este memoria se llama el montón administrado, como se opuesto a un montón nativo en el sistema operativo.

El montón no administrado es el que está siendo utilizado por código no administrado/código nativo para asignar memoria en tiempo de ejecución. Este montón no está bajo el control del recolector de basura y debe ser manejado por el desarrollador para liberar la memoria asignada. Difference between "managed" and "unmanaged"

Cuestiones relacionadas