Maison > développement back-end > C++ > Stack vs Heap : où vivent les objets C ?

Stack vs Heap : où vivent les objets C ?

Barbara Streisand
Libérer: 2024-11-13 10:53:02
original
224 Les gens l'ont consulté

Stack vs. Heap: Where Do C   Objects Live?

Création d'objet : pile ou tas

Lors de la création d'un objet en C, votre choix de syntaxe affecte s'il réside sur la pile ou le tas. Bien que ce concept ne soit pas explicitement référencé dans les extraits de code fournis, il est important de le comprendre pour une gestion efficace de la mémoire.

Création d'objet sur la pile

L'objet de code o ; crée un objet sur la pile. La durée de stockage de l'objet est automatique, c'est-à-dire qu'il existe dans le périmètre où il a été déclaré. Lorsque la portée se termine, l'objet aussi.

Création d'objet sur le tas

Pour allouer un objet sur le tas, nous utilisons Object * o ; o = nouvel objet(). Cela crée un pointeur sur la pile qui pointe vers un objet sur le tas. La durée de stockage de l'objet est dynamique, allouée au moment de l'exécution et doit être libérée manuellement (via suppression) pour éviter les fuites de mémoire.

Création d'un pointeur et stockage d'un objet de tas

Dans le code Objet *o; o = new Object(), le pointeur o est créé sur la pile, mais il pointe vers un objet créé sur le tas. Cela nous permet d'accéder indirectement à l'objet tas via le pointeur.

Objets globaux

Les variables globales résident dans une région de mémoire différente en dehors de la pile et du tas. Lorsque Object * o est déclaré comme variable globale, le pointeur lui-même est stocké dans cette zone de mémoire globale.

Durée de stockage

En C , la durée de stockage détermine l'allocation des objets :

  • Automatique : Variables qui existent dans la portée où elles sont déclarées (par exemple, Objet o;).
  • Dynamique : Alloué et désalloué manuellement à l'aide de new et delete (par exemple, Object * o; o = new Object()).
  • Statique : Initialisé avec une expression constante et persiste tout au long de la durée de vie du programme (par ex. , const Objet o = {};).

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