Junior
Kedy a ako dlho existujú globálne a lokálne premenné v C++?
sobes.tech AI
Odpoveď od AI
Globálne premenné
- Doba existencie: Od spustenia programu do jeho ukončenia.
- Miesto uloženia: Zvyčajne v statickej oblasti pamäti (.data alebo .bss sekcie spustiteľného súboru).
- Inicializácia:
- Nestatické globálne premenné definované na úrovni súboru, s komplexnými konštruktormi, sa inicializujú pred volaním
main(). - Premenné s nulovou inicializáciou (napríklad int i = 0;) sa tiež inicializujú pred
main(). - Premenné definované s
constalebo so statickým trvaním sa inicializujú pri načítaní programu.
- Nestatické globálne premenné definované na úrovni súboru, s komplexnými konštruktormi, sa inicializujú pred volaním
- Dostupnosť: Viditeľné vo všetkých funkciách v rámci oblasti viditeľnosti.
Lokálne premenné
- Doba existencie: Od definície premennej v rámci bloku kódu (funkcia, slučka, podmienka atď.) do opustenia tohto bloku.
- Miesto uloženia: Zvyčajne na zásobníku (pre automatické premenné). Statické lokálne premenné sú uložené v statickej oblasti pamäti.
- Inicializácia:
- Automatické lokálne premenné nie sú predvolene inicializované (obsahujú "neporiadok"). Vyžadujú explicitnú inicializáciu.
- Statické lokálne premenné sa inicializujú raz pri prvom dosiahnutí.
- Dostupnosť: Viditeľné iba v rámci bloku kódu, kde sú definované.
Príklady
// Globálna premenná
int global_variable = 10;
void some_function() {
// Lokálna premenná (automatická)
int local_variable_1; // Bez inicializácie
// Lokálna premenná (automatická) s inicializáciou
int local_variable_2 = 20;
// Statická lokálna premenná
static int static_local_variable = 30; // Inicializuje sa raz
// Prístup ku globálnej premennej
global_variable++;
// Prístup k lokálnym premenným
local_variable_1 = global_variable;
static_local_variable++;
}
int main() {
some_function();
some_function(); // static_local_variable si zachovala hodnotu
// Globálna premenná je dostupná tu
// local_variable_1 a local_variable_2 nie sú dostupné
return 0;
}
Porovnávacia tabuľka
| Charakteristika | Globálne premenné | Lokálne premenné (automatické) | Statické lokálne premenné |
|---|---|---|---|
| Doba existencie | Od spustenia programu do jeho ukončenia | Od definície do opustenia bloku kódu | Od prvého dosiahnutia do ukončenia programu |
| Miesto uloženia | Statická oblasť pamäti (.data, .bss) | Zásobník (stack) | Statická oblasť pamäti (.data, .bss) |
| Inicializácia | Pred volaním main() alebo pri načítaní programu |
Neinicializované predvolene. Vyžaduje sa explicitná inicializácia | Raz pri prvom dosiahnutí |
| Dostupnosť | Viditeľné všade v oblasti viditeľnosti súboru | Len v rámci bloku, kde sú definované | Len v rámci bloku, kde sú definované |