mémoire globale est pré-alloué dans un bloc de mémoire fixe, ou sur le tas, selon la façon dont il est attribué par votre application:
byte x[10]; // pre-allocated by the compiler in some fixed memory block
byte *y
main()
{
y = malloc(10); // allocated on the heap
}
EDIT:
La question est source de confusion: Si j'alloue une structure de données globalement dans une application C++, consomme-t-elle de la mémoire de pile ou de la mémoire de tas?
"allouer"? Cela pourrait signifier beaucoup de choses, y compris l'appel de malloc(). Cela aurait été différent si la question était "si je déclare et initialise une structure de données globalement". Il y a de nombreuses années, lorsque les CPU utilisaient encore des segments 64K, certains compilateurs étaient assez intelligents pour allouer dynamiquement de la mémoire depuis le tas au lieu de réserver un bloc dans le segment .data (en raison des limitations de l'architecture mémoire).
Je crois que je suis trop vieux ....
aussi, quelle est la différence entre une variable globale et une variable statique (dans une fonction). Ils doivent vivre pour la vie du programme ... – user128026
accepté mais leur différence entre accessibilité –
@dspinozzi: les constructeurs de variables globales sont appelés avant main(), mais les constructeurs de variables statiques sont appelés la première fois la fonction est appelé. Les deux types de variables sont généralement stockés dans les mêmes parties de la mémoire - je pense que GCC les place dans la section .data. – Neil