Junior
Wanneer en hoe lang bestaan globale en lokale variabelen in C++?
sobes.tech AI
Antwoord van AI
Globale variabelen
- Levensduur: Van het starten van het programma tot het beëindigen.
- Opslagplaats: Gewoonlijk in het statische geheugengebied (.data of .bss sectie van het uitvoerbare bestand).
- Initialisatie:
- Niet-statische globale variabelen, gedefinieerd op bestandsniveau, met niet-triviale constructors, worden geïnitialiseerd vóór de aanroep van
main(). - Globale variabelen met nulinitialisatie (bijvoorbeeld, int i = 0;) worden ook vóór
main()geïnitialiseerd. - Variabelen gedefinieerd met
constof met statische opslagduur worden geladen en geïnitialiseerd bij het laden van het programma.
- Niet-statische globale variabelen, gedefinieerd op bestandsniveau, met niet-triviale constructors, worden geïnitialiseerd vóór de aanroep van
- Beschikbaarheid: Zien in alle functies binnen het bereik.
Lokale variabelen
- Levensduur: Van de definitie van de variabele binnen een codeblok (functie, lus, voorwaarde, etc.) tot het verlaten van dat blok.
- Opslagplaats: Gewoonlijk op de stack (voor automatische variabelen). Statische lokale variabelen worden opgeslagen in het statische geheugengebied.
- Initialisatie:
- Automatische lokale variabelen worden standaard niet geïnitialiseerd (bevatten "rommel"). Vereisen expliciete initialisatie.
- Statische lokale variabelen worden één keer geïnitialiseerd bij hun eerste definitie.
- Beschikbaarheid: Alleen zichtbaar binnen het codeblok waarin ze zijn gedefinieerd.
Voorbeelden
// Globale variabele
int global_variable = 10;
void some_function() {
// Lokale variabele (automatisch)
int local_variable_1; // Niet geïnitialiseerd
// Lokale variabele (automatisch) met initialisatie
int local_variable_2 = 20;
// Statische lokale variabele
static int static_local_variable = 30; // Wordt één keer geïnitialiseerd
// Toegang tot de globale variabele
global_variable++;
// Toegang tot lokale variabelen
local_variable_1 = global_variable;
static_local_variable++;
// Na het verlaten van some_function() bestaan local_variable_1 en local_variable_2 niet meer
// static_local_variable blijft bestaan en behoudt zijn waarde
}
int main() {
some_function();
some_function(); // static_local_variable heeft zijn waarde behouden
// De globale variabele is hier toegankelijk
// local_variable_1 en local_variable_2 zijn niet toegankelijk
return 0;
}
Vergelijkingstabel
| Kenmerk | Globale variabelen | Lokale variabelen (automatisch) | Statische lokale variabelen |
|---|---|---|---|
| Levensduur | Van het starten van het programma tot het einde | Van de definitie tot het verlaten van het codeblok | Van de eerste bereiking van de definitie tot het einde van het programma |
| Opslagplaats | Statische geheugenruimte (.data, .bss) | Stack | Statische geheugenruimte (.data, .bss) |
| Initialisatie | Voor het aanroepen van main() of bij het laden van het programma |
Niet standaard geïnitialiseerd. Vereist expliciete initialisatie | Een keer bij de eerste definitie |
| Beschikbaarheid | Overal binnen het bereik van het bestand | Alleen binnen het codeblok waarin ze zijn gedefinieerd | Alleen binnen het codeblok |