Junior
Când și pentru cât timp există variabilele globale și locale în C++?
sobes.tech AI
Răspuns de la AI
Variabile globale
- Durata de viață: De la pornirea programului până la finalizarea acestuia.
- Locul de stocare: De obicei în zona de memorie statică (.data sau secțiunea .bss a fișierului executabil).
- Inițializare:
- Variabilele globale non-statice, definite la nivel de fișier, cu constructori ne-triviali, sunt inițializate înainte de apelul
main(). - Variabilele globale cu inițializare zero (de exemplu, int i = 0;) sunt, de asemenea, inițializate înainte de
main(). - Variabilele definite cu
constsau cu durată de viață statică sunt inițializate la încărcarea programului.
- Variabilele globale non-statice, definite la nivel de fișier, cu constructori ne-triviali, sunt inițializate înainte de apelul
- Disponibilitate: Sunt vizibile în toate funcțiile din cadrul domeniului.
Variabile locale
- Durata de viață: De la definirea variabilei în interiorul unui bloc de cod (funcție, buclă, condiție etc.) până la ieșirea din acel bloc.
- Locul de stocare: De obicei pe stivă (pentru variabile automate). Variabilele locale statice sunt stocate în zona de memorie statică.
- Inițializare:
- Variabilele locale automate nu sunt inițializate implicit (conțin "mizerie"). Necesită inițializare explicită.
- Variabilele locale statice sunt inițializate o singură dată la prima lor declarație.
- Disponibilitate: Vizibile doar în interiorul blocului de cod în care sunt definite.
Exemple
// Variabilă globală
int global_variable = 10;
void some_function() {
// Variabilă locală (automată)
int local_variable_1; // Neinițializată
// Variabilă locală (automată) cu inițializare
int local_variable_2 = 20;
// Variabilă locală statică
static int static_local_variable = 30; // Se inițializează o dată
// Acces la variabila globală
global_variable++;
// Acces la variabilele locale
local_variable_1 = global_variable;
static_local_variable++;
// După ieșirea din some_function(), local_variable_1 și local_variable_2 încetează să mai existe
// static_local_variable continuă să existe și păstrează valoarea
}
int main() {
some_function();
some_function(); // static_local_variable și-a păstrat valoarea
// Variabila globală este disponibilă aici
// local_variable_1 și local_variable_2 nu sunt accesibile
return 0;
}
Tabel comparativ
| Caracteristică | Variabile globale | Variabile locale (automate) | Variabile locale statice |
|---|---|---|---|
| Durata de viață | De la pornirea programului până la finalizare | De la definire până la ieșirea din blocul de cod | De la prima atingere a definiției până la finalul programului |
| Locul de stocare | Zona de memorie statică (.data, .bss) | Stivă | Zona de memorie statică (.data, .bss) |
| Inițializare | Înainte de apelul main() sau la încărcarea programului |
Nedeclarată implicit. Necesită inițializare explicită | O dată la prima declarație |
| Disponibilitate | Oriunde în domeniul fișierului | Doar în interiorul blocului de cod | Doar în interiorul blocului de cod |