Où sont les variables statiques sont stockées (segment de données ou d'un segment ou BSS)?
J'ai obtenu Opinions contradictoires au sujet de variable statique de stockage.
Avis 1 : "Un pile statique de la variable stocke sa valeur dans le tas"
Avis 2 : "Un pile statique de la variable stocke sa valeur dans le données segment".
Je suis confus avec ces des réponses contradictoires.
Exactement où sont les variables statiques sont stockées?
Je suis dans l'attente d'une réponse avec des références (livres de texte, authentique, tutoriels, etc.).
Statique des variables sont de deux types:
- statique des variables déclarées à l'intérieur d'une fonction.
- global (déclarée en dehors de la fonction) variable statique.
Je voudrais aussi savoir si il y a une différence dans le stockage de ces deux types de variables?
C'est peut-être un doublon de stackoverflow.com/questions/93039/... mais c'est dur à dire, parce que l'OP semble mix "statique" et "pile".
OriginalL'auteur SIVA | 2010-03-25
Vous devez vous connecter pour publier un commentaire.
La "pile" variables sont généralement stockés sur "la pile", qui est distinct du texte, de données, de bss et tas de sections de votre programme.
La deuxième partie de votre question est à propos de "statique" des variables, qui sont différentes de la pile des variables - en effet, les variables statiques ne vivent pas sur la pile à tous. Classiquement, les variables statiques seraient tous dans les données ou bss sections de votre programme. Avec les compilateurs modernes, si les données sont const-qualifiés, les données peuvent être stockées dans la section de texte de votre programme, qui a une variété d'avantages (y compris les non-caractère modifiable).
Le C standard ne dicte pas qu'il y est une pile, ni un sev de la section. Il faut juste l'espace de stockage disponible pour les variables appropriées durées.
OriginalL'auteur Jonathan Leffler
Pile de la mémoire est allouée lorsque vous lancez votre application et reste toujours la même taille au cours de l'exécution de l'application. Ce n'est pas stockée dans le segment de DONNÉES, de DONNÉES de segment est pour des choses comme les valeurs des constantes utilisées dans l'application (tels que les littéraux de chaîne).
OriginalL'auteur reko_t
À la fois locales et globales les variables statiques sont conservés dans initialisé segments de Données
Il y a deux segments de données initialisée segment de données et non dans le segment de données.
Non initialisé segment de données, aussi appelé BSS.
Quand nous disons segment de données par défaut, initialisé segment de données, cette section est copié à partir d'une image chargée de le programme. ( toutes les variables globales et locales les variables statiques sont initialisés à zéro, c'est à dire ini var1_global = 10; )
Les données non initialisées segemnet aka BSS. Cette section sera initialisé à zéro general, juste avant le main() est appelée. Tous les non globale, locale statique va ici.
http://www.geeksforgeeks.org/memory-layout-of-c-program/
OriginalL'auteur satya