2010-06-10 7 views
2

Cela peut être une dupe. Je n'ai pas trouvé assez d'informations à ce sujet. Je parlais de l'allocation de mémoire pour les collections dans .Net. Où est la mémoire pour les éléments alloués dans une collection? La variable myList est allouée sur la pile et fait référence à l'objet List créé sur le segment de mémoire.Allocation de mémoire pour les collections dans .NET

La question est quand les éléments int sont ajoutés à myList, où seraient-ils créés?

Quelqu'un peut-il pointer dans la bonne direction?

+0

I suis curieux. Votre question porte sur l'allocation de mémoire dans .NET, mais votre titre a été posé à propos de C#. Pourquoi donc? –

+0

Je voulais dire l'allocation de mémoire dans .Net. Je suis tellement habitué à C# qu'il apparaît par inadvertance dans ma discussion. :) – AlwaysAProgrammer

Répondre

2

Les éléments se trouveront également dans le tas (dans un tableau, c'est comme cela que fonctionne List en interne).

En principe, seules les variables et arguments locaux sont alloués sur la pile et tout autre va sur le tas (sauf si vous utilisez des choses rares comme stackalloc, mais vous n'avez pas besoin de vous inquiéter à ce sujet)

+0

Y aurait-il un problème de boxe si les types de valeur résident également sur tas? – AlwaysAProgrammer

+0

@Yogendra: Oui, un type de valeur simple (pensez à des nombres) doit être des boîtes avant de le mettre sur le tas. Une exception sont les tableaux primitifs, qui contiennent des types de valeur mais résident toujours sur le tas. Les éléments des tableaux primitifs ne sont pas encadrés. –

+3

Non, la liste ne contient pas de boîte. ArrayList fait. –

8

Les éléments seront créés sur le tas. La seule chose qui vit sur la pile est le pointeur (référence) de la liste (List<> est un type de référence)