Maison  >  Article  >  développement back-end  >  Où résident les objets en mémoire : pile, tas ou ailleurs ?

Où résident les objets en mémoire : pile, tas ou ailleurs ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-14 19:05:02672parcourir

Where Do Objects Reside in Memory: Stack, Heap, or Somewhere Else?

Création d'objets pile ou tas

La question soulève des inquiétudes concernant la création d'objets sur la pile ou le tas. Bien que le code fourni (Object o :) implique la création d'objets sur la pile, il ne mentionne pas explicitement la pile ou le tas. Clarifions cette distinction.

En C , l'emplacement d'un objet en mémoire est déterminé par sa durée de stockage, et non par la pile ou le tas spécifiquement. Il existe quatre durées de stockage : automatique, dynamique, statique et thread local. Le stockage automatique est principalement utilisé pour les variables locales sur la pile d'appels, tandis que le stockage dynamique est utilisé pour les objets alloués sur le tas avec « nouveau ».

  • Pile : Stockage automatique, généralement réservé aux variables locales.
  • Heap : Stockage dynamique, utilisé pour les objets créés avec 'new'.
  • Mémoire statique : Statique (ou thread -local) les objets ne résident ni dans une pile ni dans un tas, généralement dans une région distincte.

Création d'objet

  • Objet o ; // Variable locale avec stockage automatique (pile)
  • Object o = Object(); // Stockage dynamique (tas)
  • Objet* o ; // Pointeur vers un objet avec stockage automatique (pile)
  • Object* o = new Object(); // Pointeur vers un objet avec stockage dynamique (heap)

Contexte et durée de stockage

La durée de stockage d'un objet est déterminée par son contexte. Par exemple :

  • foo.o: Variable membre dans un objet alloué statiquement (ni pile ni tas)
  • f.o: Membre variable dans un objet alloué localement (pile)
  • p->o : Variable membre dans un objet alloué dynamiquement (tas)

Pointeurs et stockage

Les pointeurs eux-mêmes sont des objets et suivent les mêmes règles de stockage. Leur stockage est déterminé par leur contexte et non par le type vers lequel ils pointent. Le type vers lequel ils pointent détermine la durée de stockage de l'objet pointé.

Dans l'ensemble, comprendre la durée de stockage est crucial pour comprendre la gestion de la mémoire en C . Les objets peuvent résider dans différentes régions de mémoire en fonction de leur durée de stockage et de leur contexte.

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!

Déclaration:
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