2010-06-10 28 views
2

Les types de valeur définis à l'intérieur d'un type de référence sont-ils stockés sur le tas ou sur la pile?Où sont stockés les types de valeur définis dans un type de référence (tas ou pile)?

  1. Si stocké sur le tas, alors quand les types de valeur sont-ils stockés dans la pile?
  2. Si elle est stockée dans la pile, que se passe-t-il dans le tas alors que tout se termine par un type de valeur à la fin?
+1

Je vous conseillerais de sélectionner CLR via C# ou C# en profondeur et de parcourir les chapitres correspondants. Ce n'est pas un sujet trivial .. – Gishu

+0

Aussi possible dupe de http://stackoverflow.com/questions/1130468 – Gishu

Répondre

1

Comme cité here:

Chaque variable locale (par exemple une déclaré dans un procédé) est stockée sur la pile. Cela inclut les variables de type de référence - la variable elle-même est sur la pile, mais rappelez-vous que la valeur d'une variable de type référence est seulement une référence (ou null), pas l'objet lui-même. Paramètres de la méthode comptent comme variables locales aussi, mais si elles sont déclarées avec le modificateur ref, ils ne reçoivent pas leur propre logement, mais partagent une fente avec la variable utilisée dans le appelant le code

Je suppose que quelque chose comme TextBox txtbx = new TextBox(); signifie que la variable txtbx vit sur la pile mais sa valeur est généralement une référence à un objet vivant sur le tas.

Les variables d'instance pour un type de référence sont toujours sur le tas. C'est là que l'objet "vit".

+0

seulement nw a réalisé que deux réponses à ce post à partir de ce moment pointent vers le même article. : | – deostroll

+0

+1, bien que votre dernière phrase (la partie qui répond réellement à la question) devrait probablement venir * d'abord * –

2

Les seules variables stockées dans la pile sont des variables locales pour une fonction. Pour les types de référence, la référence est stockée sur la pile tandis que l'objet auquel elle fait référence est stocké sur le tas. Pour les types de valeur, l'objet lui-même est stocké sur la pile. Notez que les variables locales qui peuvent s'échapper de la fonction locale (par exemple, via une fermeture) sont stockées dans une structure de données distincte sur le tas, y compris tous les types de valeur pouvant être inclus. En d'autres termes, comme les types de référence sont toujours stockés sur le tas, tout ce qu'ils contiennent (même les types de valeur) est également stocké sur le tas.