Maison > développement back-end > C++ > Tas ou pile : où « new » alloue-t-il les structures en C# ?

Tas ou pile : où « new » alloue-t-il les structures en C# ?

Patricia Arquette
Libérer: 2025-01-13 15:06:46
original
787 Les gens l'ont consulté

Heap or Stack: Where Does `new` Allocate Structs in C#?

Allocation mémoire de la structure par new opérateur en C# : tas ou pile ?

Lorsqu'une classe est instanciée à l'aide de l'opérateur new, la mémoire est allouée sur le tas. Cependant, le comportement de l'opérateur new sur les structures dépend du scénario spécifique. Explorons les différences :

Constructeur avec paramètres

Lors de l'appel du constructeur paramétré d'une structure à l'aide de new, la mémoire est allouée sur la pile. Ceci est similaire à l’attribution d’une valeur à une variable locale d’un type valeur.

<code class="language-csharp">Guid local = new Guid("");</code>
Copier après la connexion

Le code IL attribué utilise newobj pour allouer de la mémoire sur la pile et initialiser la valeur à l'aide de la chaîne fournie.

Constructeur sans paramètres

Lors de l'appel du constructeur sans paramètre d'une structure à l'aide de new, le comportement dépend du contexte :

  • est affecté à un champ ou à une variable locale :

Aucune mémoire ne sera allouée sur la pile. Utilisez plutôt initobj pour initialiser un emplacement de stockage existant (champ ou variable locale). Les types de valeur sont construits sur place.

<code class="language-csharp">Guid field;
...
field = new Guid();</code>
Copier après la connexion
  • Valeur intermédiaire de l'appel de méthode :

Allouez une variable locale temporaire sur la pile et initialisez-la à l'aide de initobj. Cette valeur est ensuite passée en paramètre à la méthode.

<code class="language-csharp">MethodTakingGuid(new Guid());</code>
Copier après la connexion
  • est affecté à des variables d'instance ou des variables statiques :

Aucune mémoire ne sera allouée sur la pile. Les types valeur sont construits directement à l’emplacement de stockage de l’instance ou de la variable statique.

<code class="language-csharp">myInstance.GuidProperty = new Guid();</code>
Copier après la connexion

Conclusion

Le comportement d'affectation de l'opérateur

new lorsqu'il est utilisé avec une structure dépend du contexte. Pour les constructeurs avec paramètres, la mémoire est toujours allouée sur la pile. Pour les constructeurs sans paramètre, la mémoire peut ne pas être allouée sur la pile, selon le contexte. Ce comportement dépend fortement des directives IL générées par le compilateur lors de la conversion du code C#.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal