web-dev-qa-db-fra.com

Les variables globales en C ++ sont-elles stockées sur la pile, le tas ou aucune d'elles?

J'ai un examen mardi et je l'ai remarqué, cette question est celle que mon professeur pose beaucoup dans ses textes.

Au départ, j'étais à peu près sûr que la bonne réponse devait être "Aucune d'entre elles", car les variables globales sont stockées dans la mémoire de données, mais j'ai trouvé ce livre de Robert Lafore, intitulé "Programmation orientée objet en C++" et il indique clairement que, selon la norme C++, les variables globales sont stockées sur le tas. Maintenant, je suis assez confus et je ne peux pas vraiment comprendre quelle est la bonne réponse à la question qui a été posée.

Pourquoi les variables globales seraient-elles stockées sur le tas? Qu'est-ce que je rate?

Merci d'avance.

EDIT: Lien vers le livre - page 231

18

Voici ce que dit le livre à la page 205:

Si vous connaissez l'architecture du système d'exploitation, vous pourriez être intéressé de savoir que les variables locales et les arguments de fonction sont stockés sur la pile, tandis que les variables globales et statiques sont stockées sur le tas.

C'est définitivement une erreur dans le livre. Tout d'abord, il faut discuter du stockage en termes de durée de stockage, comme le fait le standard C++: "pile" fait référence à la durée de stockage automatique, tandis que "tas" fait référence à la durée de stockage dynamique. "Stack" et "heap" sont des stratégies d'allocation, couramment utilisées pour implémenter des objets avec leurs durées de stockage respectives.

Les variables globales ont une durée de stockage statique. Ils sont stockés dans une zone séparée à la fois du "tas" et de la "pile". Les objets constants globaux sont généralement stockés dans le segment "code", tandis que les objets globaux non constants sont stockés dans le segment "données".

31
dasblinkenlight