Maison >développement back-end >C++ >Pile ou tas : où se trouve une structure de données déclarée globalement en C ?

Pile ou tas : où se trouve une structure de données déclarée globalement en C ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-09 22:43:09629parcourir

Stack vs. Heap: Where Does a Globally Declared Data Structure in C   Live?

Allocation de mémoire en C : Stack vs. Heap pour les structures de données globales

Lors de la déclaration d'une structure de données globalement en C , la question se pose de savoir si il consomme de la mémoire de pile ou de la mémoire de tas. Pour bien comprendre cela, il est essentiel de comprendre les différents segments de mémoire qu'un processus utilise.

En général, un processus possède cinq zones de mémoire principales :

  1. Code (segment de texte) :Contient le code exécutable.
  2. Données initialisées (données segment): Stocke les variables globales et statiques initialisées avec des valeurs au moment de la compilation.
  3. Données non initialisées (segment bss): Contient les variables globales et statiques non initialisées au moment de la compilation, initialisées à zéro au moment de l'exécution.
  4. Tas : Mémoire allouée dynamiquement acquise à l'aide d'opérateurs comme new et malloc.
  5. Pile : Stocke les variables locales, les paramètres de fonction et les adresses de retour.

Revenant à la question d'origine, si une structure de données est déclarée globalement ( pas au sein d'une fonction), il sera alloué soit dans le segment data (données initialisées), soit dans le segment bss (données non initialisées), selon qu'il est initialisé ou non. Ces segments résident dans la mémoire statique, qui est généralement gérée par le système d'exploitation et n'est pas accessible au programme.

Par conséquent, les structures de données déclarées globalement en C ne consomment pas de mémoire de pile.

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