Junior
Quand et combien de temps existent les variables globales et locales en C++?
sobes.tech IA
Réponse de l'IA
Variables globales
- Temps de vie: Du lancement du programme jusqu'à sa fin.
- Lieu de stockage: Généralement dans la zone de mémoire statique (.data ou section .bss du fichier exécutable).
- Initialisation:
- Les variables globales non statiques, définies au niveau du fichier, avec des constructeurs non triviaux, sont initialisées avant l'appel à
main(). - Les variables globales avec initialisation à zéro (par exemple, int i = 0;) sont également initialisées avant
main(). - Les variables définies avec
constou ayant une durée de vie statique sont initialisées lors du chargement du programme.
- Les variables globales non statiques, définies au niveau du fichier, avec des constructeurs non triviaux, sont initialisées avant l'appel à
- Disponibilité: Sont visibles dans toutes les fonctions dans le périmètre.
Variables locales
- Temps de vie: Depuis la définition de la variable à l'intérieur d'un bloc de code (fonction, boucle, condition, etc.) jusqu'à la sortie de ce bloc.
- Lieu de stockage: Généralement sur la pile (pour les variables automatiques). Les variables locales statiques sont stockées dans la zone de mémoire statique.
- Initialisation:
- Les variables locales automatiques ne sont pas initialisées par défaut (contiennent des "données basura"). Nécessitent une initialisation explicite.
- Les variables locales statiques sont initialisées une fois lors de leur première déclaration.
- Disponibilité: Seulement visibles à l'intérieur du bloc de code où elles sont définies.
Exemples
// Variable globale
int global_variable = 10;
void some_function() {
// Variable locale (automatique)
int local_variable_1; // Non initialisée
// Variable locale (automatique) avec initialisation
int local_variable_2 = 20;
// Variable locale statique
static int static_local_variable = 30; // Initialisée une fois
// Accès à la variable globale
global_variable++;
// Accès aux variables locales
local_variable_1 = global_variable;
static_local_variable++;
// Après la sortie de some_function(), local_variable_1 et local_variable_2 cessent d'exister
// static_local_variable continue d'exister, conservant sa valeur
}
int main() {
some_function();
some_function(); // static_local_variable a conservé sa valeur
// La variable globale est accessible ici
// local_variable_1 et local_variable_2 ne sont pas accessibles
return 0;
}
Tableau comparatif
| Caractéristique | Variables globales | Variables locales (automatiques) | Variables locales statiques |
|---|---|---|---|
| Temps de vie | Depuis le lancement jusqu'à la fin du programme | Depuis la déclaration jusqu'à la sortie du bloc de code | Depuis la première déclaration jusqu'à la fin du programme |
| Lieu de stockage | Zone de mémoire statique (.data, .bss) | Pile | Zone de mémoire statique (.data, .bss) |
| Initialisation | Avant l'appel à main() ou lors du chargement du programme |
Non initialisées par défaut. Nécessitent une initialisation explicite | Une fois lors de la première déclaration |
| Disponibilité | Partout dans le périmètre du fichier | Seulement à l'intérieur du bloc de code | Seulement à l'intérieur du bloc de code |