English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

C / C ++中的靜態變量存儲在哪里?

Le variabili statiche sono le variabili che rimangono nella memoria durante l'esecuzione del programma, ossia la loro durata di vita è per l'intera durata dell'esecuzione del programma. A differenza delle variabili automatiche, che rimangono nella memoria solo durante l'esecuzione della funzione e vengono distrutte alla fine della funzione.

Le variabili statiche vengono memorizzate nel segmento dei dati della memoria. Il segmento dei dati è una parte dell'indirizzario virtuale del programma.

Tutte le variabili statiche che non sono esplicitamente inizializzate o inizializzate a zero vengono memorizzate nel segmento dei dati non inizializzati (noto anche come segmento BSS). A differenza di queste, le variabili statiche inizializzate vengono memorizzate nel segmento dei dati inizializzati.

Ecco un esempio:

static int x = 5;
static int y;
La variabile statica x è memorizzata nel segmento dei dati inizializzati e la variabile statica y è memorizzata nel segmento BSS (non inizializzato).

Ecco un esempio di programma che utilizza la variabile statica in C:

Esempio

#include<stdio.h>
int func()
   static int i = 4;
   i++;
   return i;
}
int main()
   printf("%d\n", func());
   printf("%d\n", func());
   printf("%d\n", func());
   printf("%d\n", func());
   printf("%d\n", func());
   printf("%d\n", func());
   return 0;
}

Ecco l'output del programma sopra menzionato:

5
6
7
8
9
10

Ora capiamo il programma sopra menzionato.

All'interno della funzionefunc()Poiché i è una variabile statica inizializzata a 4, essa viene memorizzata nel segmento dei dati inizializzati. Poi i viene incrementato e il suo valore viene restituito. Ecco il segmento di codice per visualizzare questo:

int func()
   static int i = 4;
   i++;
   return i;
}

All'interno della funzionemain()La funzionefunc()Eseguito 6 volte, restituisce il valore di i da stampare. Poiché i è una variabile statica, rimane nella memoria durante l'esecuzione del programma e fornisce un valore coerente. Ecco il segmento di codice per visualizzare questo:

printf("%d\n", func());
printf("%d\n", func());
printf("%d\n", func());
printf("%d\n", func());
printf("%d\n", func());
printf("%d\n", func());