sont des listes génériques stockées sur la pile ou le tas?
est myints code> stocké sur la pile ou le tas? Si j'ajoute un
int code> à la liste, la boxe ou la boîte de commande se produisent-elles? P> p>
3 Réponses :
Il n'y a pas de concept de "tas" ou "pile" lors de la création d'objets en C # ou à .NET. Bien que la liste soit stockée sur le tas, c'est vraiment un détail de mise en œuvre de la façon dont le CLR gère sa mémoire. P>
Il n'y a pas de boxe ni de boîte de consigne ici. C'est l'avantage d'utiliser la liste Generic Liste Code> sur le tableau code> non générique code>. Lorsqu'une nouvelle instance de
Liste
int code>. Il n'y a même aucun casting sur les scènes lorsqu'un
int code> est extrait de la liste. P>
Cela pourrait être un détail de mise en œuvre, mais la spécification de la langue mentionne que les instances de types de référence sont stockées sur le tas et les types de valeur ne sont pas.
blogs. msdn.com/b/ericlippert/archive/2009/04/27/...
@Brian, mais ce n'est qu'une partie de l'histoire. Où est un champ de type de valeur d'un objet de référence stocké? Avec l'objet. Et le point plus large est qu'il pourrait tout changer dans une version future hypothétique.
@Anthony: Je sais. Je n'essayais pas d'expliquer comment les choses sont stockées. Je soulignais simplement que la spécification de la langue couvre ceci un certain nombre de fois. Veuillez noter que je n'ai pas dit que les types de valeur sont stockés sur la pile, mais simplement qu'ils n'entraînent pas une allocation de tas qui est le libellé utilisé dans la spécification.
pour les structures telles que Notez que les valeurs elles-mêmes sont stockées dans une matrice de support de la liste int code>, la liste générique est spécialisée et donc aucune boxe / décomposition n'est requise. P>
code> Néanmoins. P>
Liste
t [] code>. Le tableau est un type de référence. Les instances de types de référence sont stockées sur le tas. Étant donné que la liste de votre exemple est une liste
int code> s et pas de boxe ne se produit. La boxe se produit si vous devez traiter une valeur de valeur comme type de référence. p>
Bonjour cerveau, pouvez-vous s'il vous plaît expliquer comment exactement la répartition de la mémoire a lieu pour cette liste
@Tanuja: la liste elle-même et tout son contenu sera stocké sur le tas. Votre référence indiquera l'instance de liste sur le tas. Les types de valeurs sont stockés sur le tas si elles font partie d'un type de référence (par exemple, un champ INT d'une classe) ou stockés dans un tableau.