Sobes.tech
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 const ou ayant une durée de vie statique sont initialisées lors du chargement du programme.
  • 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