2011-01-18 14 views
6

Posso immaginare che questa domanda sia stata posta migliaia di volte, ma non ho avuto molta fortuna nel trovare la risposta, in più questo è più per curiosità che per necessità.Anche i tipi di valore nell'oggetto sono memorizzati nell'heap?

Scavando nei dadi e bulloni di C#, mi chiedevo poiché gli oggetti sono memorizzati nell'heap, sono i tipi di valore all'interno degli oggetti memorizzati nell'heap o vengono inseriti nello stack?

risposta

6

Sono memorizzati nell'heap, all'interno della memoria allocata per il tipo di riferimento. Inoltre, value types are often stored in places other than "the stack". Tuttavia, le specifiche CLI non specificano dove risiede il pool di memoria che memorizza i tipi di valore: è un dettaglio di implementazione che non dovrebbe avere importanza.

+0

Ottimo articolo, grazie! – BoredOfBinary

3

Questi sono memorizzati nell'heap, con gli oggetti stessi. Un buon modo per pensare a questo è che quando un oggetto (che ha tipi di valore come parte del suo stato) è allocato sull'heap, è necessario che anche i tipi di valore li abitino, altrimenti quei tipi di valore scomparirebbero non appena lo stack si svolgeva per il codice che ha creato l'oggetto.

1

Sì, vengono memorizzati come parte dell'heap. Tuttavia, è tutto un dettaglio di implementazione, come Eric Lippert ha descritto in diverse occasioni. Vi suggerisco di leggere i suoi post sul blog su di esso, this è il più recente, e anche thesetwo è importante.

+0

Grandi articoli, grazie! A proposito, adoro il tuo libro, capita di leggerlo ora! – BoredOfBinary

9

Andrew Hare ha ragione. Per i dettagli completi, vedere Eric Lippert's blog entry:

che sono disturbato dal mito che "i tipi di valore vanno in pila" ... Di solito è indicato in modo errato: la dichiarazione deve essere "tipi di valore possono essere memorizzati su lo stack ", invece dei più comuni" tipi di valore sono sempre memorizzati nello stack ".

+1

+1 per aver citato "Sono disturbato dal mito .." – Gabe

Problemi correlati