2011-01-18 15 views
6

Me imagino que esta pregunta se ha hecho miles de veces, pero no he tenido mucha suerte en encontrar la respuesta, además, esto es más por curiosidad que por necesidad.¿Tipos de valores en objetos almacenados en el montón también?

Explorando las tuercas y los pernos de C#, me preguntaba, dado que los objetos se almacenan en el montón, ¿los tipos de valores dentro de los objetos también se almacenan en el montón o se colocan en la pila?

Respuesta

6

Se almacenan en el montón, dentro de la memoria asignada para el tipo de referencia. Además, value types are often stored in places other than "the stack". Sin embargo, la especificación CLI no especifica dónde reside el grupo de memoria que almacena los tipos de valores: es un detalle de implementación que no debería importar.

+0

¡Gran artículo, gracias! – BoredOfBinary

3

Esas se almacenan en el montón, con los objetos mismos. Una buena forma de pensar sobre esto es que cuando un objeto (que tiene tipos de valor como parte de su estado) se asigna en el montón, sus tipos de valores también deben vivir allí; de lo contrario, esos tipos de valor desaparecerían tan pronto como se desenrollara la pila para el código que creó el objeto.

1

Sí, se almacenan como parte del montón. Sin embargo, es todo un detalle de implementación, como Eric Lippert ha descrito en múltiples ocasiones. Le sugiero que lea las publicaciones de su blog al respecto, this siendo la más reciente, y thesetwo también siendo importante.

+0

Grandes artículos, ¡Gracias! Por cierto, ¡amo su libro, está leyéndolo ahora! – BoredOfBinary

9

Andrew Hare tiene razón. Para los detalles, véase Eric Lippert's blog entry:

Estoy perturbado por el mito de que "los tipos de valor van a la pila" ... Por lo general se indica incorrectamente: la declaración debe ser "tipos de valor pueden ser almacenados en la pila ", en lugar de los tipos de valores más comunes" siempre se almacenan en la pila ".

+1

+1 por citar "Estoy perturbado por el mito ..." – Gabe

Cuestiones relacionadas