2011-06-28 7 views
5

Entiendo que hay recolección de basura para los tipos de referencia, pero me pregunto cómo funciona la recolección de basura para los tipos de valor.¿Se recopilan los tipos de valor de la basura?

¿Los tipos de valor obtienen la basura recogida cuando salen del alcance?

+0

posible duplicado de [¿Los tipos de valores obtienen Basura recolectada?] (Http : //stackoverflow.com/questions/2342772/do-value-types-get-garbage-collected) – nawfal

Respuesta

-1

Los tipos de valores se almacenan en la pila. Eso significa que ese tiempo de ejecución mantiene el puntero en la parte superior de la pila para cada método, y cuando regrese del método, esta parte superior se moverá hacia abajo. Hacer que las variables declaradas en este método estén fuera del alcance.

Para los campos de una clase, se almacenan en la memoria de la clase concreta y se recogen como basura de la propia clase.

+0

-1 No todos los tipos de valores van en la pila. –

+0

Estamos hablando de variables locales en los métodos de acuerdo con "cuando una variable del tipo de valor sale del alcance". Todos esos están almacenados en la pila. – Euphoric

+0

@Euphoric: No todas las variables son parámetros. El OP no está preguntando específicamente sobre los parámetros; hay muchas otras formas en que una variable puede salir del alcance. –

10

Solo se ha asignado el almacenamiento asignado en el montón .

Si una variable de tipo de valor es en el montón, o es parte de alguna otra clase, o un valor en caja, lo que es un objeto que solamente contiene el valor tipo de valor. El valor es parte de la memoria que se "libera" cuando el objeto que lo contiene es basura.

Si hay una variable de tipo de valor en la pila, la memoria que utiliza se "liberará" de manera efectiva cuando se devuelva el marco de pila mediante el método de retorno.

Tenga en cuenta que lo que termina en la pila y lo que termina en el montón es un implementation detail que se hace más complicado por variables capturadas, bloque iterador, métodos asíncronos, parámetros ref etc. Pero el principio general es que la memoria utilizada para los valores de tipo de valor siempre forman parte de "algo más", por lo que se recupera cuando se recupera la memoria para esa "otra cosa". (Esto no es una especie de paso separado: el valor reside en la memoria para ese "algo más" ya sea un objeto o un marco de pila).

Cuestiones relacionadas