Maison >développement back-end >C++ >Où les variables globales en C stockent-elles leur mémoire : pile ou tas ?

Où les variables globales en C stockent-elles leur mémoire : pile ou tas ?

DDD
DDDoriginal
2024-12-02 09:22:11971parcourir

Where Do Global Variables in C   Store Their Memory: Stack or Heap?

Allocation de mémoire pour les variables globales en C : Stack vs Heap

En C , lorsqu'une structure de données est déclarée globalement, la question se pose de savoir si il consomme de la mémoire de pile ou de la mémoire tas. Pour comprendre cela, nous examinons la disposition de la mémoire d'un processus C typique.

Disposition de la mémoire d'un processus C

Un processus C alloue généralement cinq zones de mémoire différentes :

  1. Code (segment de texte)
  2. Données initialisées (données segment)
  3. Données non initialisées (segment bss)
  4. Tas
  5. Pile

Allocation globale des variables

Lorsqu'une variable globale est déclarée, sa mémoire est allouée soit dans le segment de données, soit dans le bss segment.

  1. Segment de données : Contient des variables globales initialisées. Sa taille est fixée au moment de la compilation.
  2. Segment Bss : Contient des variables globales non initialisées. Sa taille est également fixée au moment de la compilation, mais son contenu est initialisé à zéro par défaut.

Par conséquent, les variables globales sont stockées dans le segment de données ou segment bss, qui font partie du mémoire statique allouée au programme.

Exemple

Dans le donné Par exemple, le tableau arr est une variable globale de type struct AAA. Il sera alloué soit dans le segment de données, soit dans le segment bss, selon qu'il est initialisé (a des valeurs par défaut) ou non initialisé (contient des valeurs inutiles).

Conclusion

En résumé, les structures de données globales en C consomment de la mémoire de la mémoire statique allouée au programme, notamment du segment de données ou segment bss, qui ne font partie ni de la pile ni de la mémoire tas domaines.

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