55 votes

Les Structs sont-elles toujours allouées à la pile ou parfois au tas ?

J’avais l’impression qu’en C#, les éléments struct sont alloués sur la pile et disparaissent ainsi au retour d’une méthode dans laquelle ils ont été créés. Mais que se passe-t-il si je place les valeurs struct dans une liste et que je les renvoie ? Les éléments survivent. Les instances struct sont-elles parfois allouées sur le tas ?

impression de code 0, 1, 2

26voto

Marcelo Cantos Points 91211

Les structs sont comme des s. Si vous avez un local , il sera généralement sur la pile, si vous avez une liste de `` s, ils sont stockés directement dans le tableau interne de la liste, qui se trouve sur le tas. Les structures se comportent de la même manière.

2voto

fearofawhackplanet Points 12147

Tous les types peuvent parfois être alloués sur le tas. En outre, heap / stack est un détail d’implémentation du CLR et non dans la spécification C #, vous ne devriez donc jamais compter sur de telles choses. Voir ici pour un bon article de blog sur ce sujet.

1voto

Matthew Abbott Points 32861

D’après ce dont je me souviens...

L’emplacement des types de valeur dépend de l’endroit où ils sont déclarés. Les variables de méthode sont allouées, stockées sur la pile et supprimées après l’exécution de la méthode dans le cadre de la pile. Les types de valeur déclarés dans le cadre d’un type de référence sont stockés sur le tas dans la structure du type englobant.

Faites-moi savoir si je me trompe!

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X