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
constvai kurām ir statisks derīguma termiņš, tiek inicializētas programmas ielādes laikā.
- Nestatiskās globālās mainīgās, kas definētas faila līmenī, ar netrivialiem konstruktoriem, tiek inicializētas pirms
- 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 |