2010-01-21 4 views

Répondre

7
  • Pour les types de référence: sur le tas
  • Pour les types de valeurs: sur la pile des variables locales et des paramètres de la méthode, ou sur le tas pour les membres d'un type de référence
+2

Il y a quelques cas de pointe; Les variables locales dans les blocs d'itérateur ou les variables capturées sont stockées sur le tas. De même, les membres d'une structure qui est * elle-même * (directement sur indirectement) sur le tas sont sur le tas. Les valeurs en boîte sont sur le tas aussi, bien sûr. –

+0

Une belle vue graphique est présentée sur http://www.kirupa.com/net/stacks_heaps_pg1.htm – balalakshmi

0

objets sont stockés sur empiler en C# aussi.

5

Le langage C# ne spécifie pas où un objet ou une valeur doit être stocké. Il définit simplement la sémantique des types de référence et des types de valeur.

Microsoft .NET CLR stocke des valeurs (instances de types de valeurs) contenues dans des variables locales sur la pile et des instances de types de référence (objets) et de types de valeurs non locales sur le tas. Cependant, comme indiqué précédemment, d'autres implémentations du langage C# sont libres de stocker les choses comme elles le souhaitent tant qu'elles sont conformes à la sémantique de valeur et de référence définie par la spécification de langage C#.

0

types de référence stockés sur tas managé.

Les types de valeur sont stockés par défaut sur la pile.

types de valeur peuvent également stockés sur tas dans plusieurs cas:

  1. Au cours de la boxe (coulée type de valeur à l'interface, type de valeur coulée en descente à l'objet, etc.).
  2. Si le type de valeur est un membre du type de référence
  3. Si le type de valeur utilise la fermeture