Sobes.tech
Junior

Kad un cik ilgi pastāv globālās un lokālās mainīgās C++?

sobes.tech AI

Atbilde no AI

Globālās mainīgās

  • Dzīves laiks: No programmas palaišanas līdz tās beigām.
  • Glabāšanas vieta: Parasti statiskajā atmiņas apgabalā (.data vai .bss sekcijā izpildāmajā failā).
  • Iniciācija:
    • Nestatiskās globālās mainīgās, kas definētas faila līmenī, ar netrivialiem konstruktoriem, tiek inicializētas pirms main() izsaukšanas.
    • Nullei inicializētās globālās mainīgās (piemēram, int i = 0;) arī tiek inicializētas pirms main().
    • Mainīgās, kas definētas ar const vai kurām ir statisks derīguma termiņš, tiek inicializētas programmas ielādes laikā.
  • Pieejamība: redzamas visās funkcijās, kurās ir to skats.

Vietējās mainīgās

  • Dzīves laiks: no mainīgās definēšanas vietas koda blokā (funkcijā, ciklā, nosacījuma izteiksmē utt.) līdz iziešanai no šī bloka.
  • Glabāšanas vieta: parasti uz steka (automātiskās mainīgās). Statiski vietējās mainīgās tiek glabātas statiskajā atmiņā.
  • Iniciācija:
    • Automātiskās vietējās mainīgās netiek inicializētas pēc noklusējuma (tiek uzskatītas par "mēteli"). Prasa skaidru inicializāciju.
    • Statiski vietējās mainīgās tiek inicializētas vienu reizi, kad tās pirmo reizi tiek sasniegtas.
  • Pieejamība: redzamas tikai tajā koda daļā, kurā tās ir definētas.

Piemēri

// Globālā mainīgā
int global_variable = 10;

void some_function() {
    // Vietējā mainīgā (automātiskā)
    int local_variable_1; // Nav inicializēta

    // Vietējā mainīgā (automātiskā) ar inicializāciju
    int local_variable_2 = 20;

    // Statiska vietējā mainīgā
    static int static_local_variable = 30; // Iniciē vienu reizi

    // Piekļuve globālajai mainīgajai
    global_variable++;

    // Piekļuve vietējām mainīgajām
    local_variable_1 = global_variable;
    static_local_variable++;

    // Pēc izejas no some_function(), local_variable_1 un local_variable_2 vairs nepastāv
    // static_local_variable turpina pastāvēt un saglabā savu vērtību
}

int main() {
    some_function();
    some_function(); // static_local_variable saglabājusi savu vērtību
    // Globālā mainīgā ir pieejama šeit
    // local_variable_1 un local_variable_2 nav pieejamas

    return 0;
}

Salīdzināšanas tabula

Raksturlielums Globālās mainīgās Vietējās mainīgās (automātiskās) Statiski vietējās mainīgās
Dzīves laiks No programmas palaišanas līdz tās beigām No definēšanas līdz iziešanai no koda bloka No pirmās sasniedzamības līdz programmas beigām
Glabāšanas vieta Statiskajā atmiņā (.data, .bss) Stekā Statiskajā atmiņā (.data, .bss)
Iniciācija Pirms main() izsaukšanas vai programmas ielādes Nav automātiski inicializētas. Prasa skaidru inicializāciju Vienu reizi, pirmās sasniedzamības laikā
Pieejamība Visur saskaņā ar skopu Tikai tajā koda daļā, kurā tās ir definētas Tikai tajā koda daļā, kurā tās ir definētas