Introduzione alle classi di archiviazione C.

Ogni valore o numero deve essere memorizzato in un posto per un uso successivo, giusto? Questo può essere fatto usando le variabili in C. Le variabili sono aree di memoria utilizzate nei nostri programmi. Ogni variabile sarà di un tipo specifico come numero intero, carattere e avrà anche dimensioni e layout specifici a seconda del loro tipo. Ogni tipo di variabile deve essere archiviato in una parte specifica della memoria e avrà autorizzazioni di accesso limitate o specifiche. Le classi di archiviazione in C determinano in quale parte della memoria deve essere memorizzata ogni variabile e inoltre decide l'ambito (visibilità) della variabile. Esistono quattro tipi di classi di archiviazione: auto, extern, statico e register. Un identificatore di archiviazione può essere menzionato insieme alla variabile.

Tipi di classi di archiviazione in C

I tipi di classi di archiviazione in C sono i seguenti

1. Classe di archiviazione automatica

Tutte le variabili dichiarate all'interno di una funzione o di un blocco verranno memorizzate in un identificatore automatico per impostazione predefinita anche se non sono definite in modo esplicito. L'identificatore per questa classe di archiviazione è 'auto'. L'ambito o la visibilità delle variabili nella classe di archiviazione automatica è locale per il blocco o la funzione definita. La variabile verrà distrutta una volta usciti dalla funzione o dal blocco.

Questo può essere spiegato meglio con un esempio. Considera l'esempio riportato di seguito:

Codice:

int main() (
int i = 2;
( int i = 4;
printf(“%d\n”, i);
)
printf(“%d\n”, i);
)

Produzione:

4

2

Qui, una variabile I di tipo intero viene dichiarata per prima con il valore 2 assegnato ad essa. Successivamente, all'interno di un loop o di un blocco, la variabile I dello stesso tipo intero viene dichiarata con il valore 4 assegnato ad esso. Se l'identificatore di archiviazione non viene menzionato, per impostazione predefinita verrà considerato come automatico. Nella prima istruzione printf, che è menzionata all'interno del blocco, verrà stampato 4 sulla stampa del valore di I. Mentre nella seconda istruzione printf menzionata all'esterno del blocco, verrà stampato il valore I come 2, il valore che è menzionato all'esterno il blocco. È meglio inizializzare un certo valore sulle variabili automatiche perché ci sono possibilità di ottenere qualsiasi valore di immondizia a volte se l'inizializzazione non viene eseguita. Questo esempio fornisce un quadro chiaro delle variabili automatiche e dell'ambito locale.

2. Registrare la classe di archiviazione

Le variabili archiviate nella classe di archiviazione dei registri avranno anche ambito locale, il che significa che è accessibile o visibile solo nel blocco in cui è dichiarato. Questa memoria è simile all'auto, ma la differenza principale è che le variabili auto sono memorizzate mentre le variabili del registro sono memorizzate nei registri della CPU. Questo viene fatto se vogliamo accedere alla variabile molto frequentemente. Questi possono essere usati più velocemente. Solo alcune variabili vengono memorizzate utilizzando gli identificatori di registro. Se non c'è spazio nel registro, questo viene archiviato solo nella memoria. Nessun valore iniziale è assegnato alle variabili di registro. Inoltre, l'operatore & (indirizzo-di) non può essere utilizzato su variabili di registro. Ad esempio, le variabili utilizzate per contatori o tipi di utilizzo simili vengono archiviate utilizzando l'identificatore di registro.

3. Classe di archiviazione statica

Le variabili, siano esse globali o locali, vengono archiviate utilizzando l'identificatore statico nella classe di archiviazione statica quando la variabile deve essere dichiarata una volta e il valore deve essere mantenuto. Quando una variabile viene dichiarata come statica, il valore verrà salvato o conservato tra le chiamate di funzione. Viene creato un archivio permanente che viene dichiarato una sola volta. Quando una variabile locale viene dichiarata come statica, viene creata una memoria permanente per essa e il valore viene mantenuto ogni volta che viene utilizzato. Inoltre, secondo l'ambito della normale variabile locale, le variabili locali statiche sono visibili solo alla funzione o al blocco in cui è definita. Quando una variabile globale viene dichiarata come statica, simile alla memoria statica locale, viene creata una memoria permanente che viene dichiarata una sola volta. Ma anche se è globale, queste variabili sono visibili solo all'interno del file in cui sono definite.

Le variabili statiche possono essere chiaramente rappresentate usando l'esempio seguente:

Codice:

int samplefunc() (
static int a = 0;
a = a+2;
return a;
)
int main() (
int result1 = samplefunc();
int result2 = samplefunc();
printf("%d\n", result1);
printf("%d\n", result2);
)

Produzione:

2

4

Qui, nel programma sopra, quando viene chiamato samplefunc (), la variabile a viene definita e inizializzata la prima volta e viene creata la memoria permanente per essa. Dall'espressione matematica utilizzata nella funzione il valore di a diventa poi 2. Ma quando lo stesso samplefunc () viene chiamato la seconda volta, la variabile a non viene definita o inizializzata di nuovo, piuttosto prende l'ultimo valore mantenuto e continua con l'operazione rendendo il risultato finale come 4. Questo è l'uso principale e il vantaggio delle variabili statiche.

4. Classe di memoria esterna

La variabile dichiarata come esterna, mostra che la variabile è definita altrove in un altro programma. Queste variabili esterne vengono utilizzate quando vogliamo che qualsiasi variabile o funzione definita in un programma sia utilizzata anche in un altro file. Le variabili con identificatore extern sono archiviate nella classe di archiviazione extern. Quando la variabile viene dichiarata come extern è un programma, specifica il collegamento esterno e quindi non viene nuovamente definito o inizializzato. Lo spazio di archiviazione è assegnato solo uno e anche inizializzato solo una volta. Se le variabili esterne vengono nuovamente inizializzate con un altro valore nel programma esterno, verrà visualizzato un errore che indica "Ridefinizione della variabile".

Le variabili esterne sono spiegate usando l'esempio seguente:

Codice:

Prg1.c

int count;
int main() (
count = 10;
)

Prg2.c

extern int count;
int main() (
printf(“%d”, count);
)

Produzione:

10

Qui, il conteggio delle variabili intere viene dichiarato nel primo programma C (Prg1.c) e all'interno della funzione principale, viene inizializzato al valore 10. Nel secondo programma C, la stessa variabile di conteggio viene dichiarata utilizzando l'identificatore extern, che specifica che esiste un collegamento esterno e il valore viene recuperato dalla memoria e il valore 10 viene assegnato al conteggio dei valori quando lo stampiamo nel secondo programma. Questo è l'uso di variabili esterne. Pertanto, a seconda del diverso scopo, ciascuna classe di memoria viene utilizzata per le variabili appropriate e viene dichiarata con gli identificatori corrispondenti.

Articoli consigliati

Questa è una guida alle classi di memoria C. Qui discutiamo i tipi di classi di archiviazione che includono la classe di archiviazione automatica, la classe di archiviazione del registro, la classe di archiviazione statica e la classe di archiviazione esterna. Puoi anche consultare i seguenti articoli per saperne di più–

  1. Che cos'è JavaBeans?
  2. ES6 vs ES5
  3. C ++ vs Visual C ++
  4. Prestazioni C vs C ++

Categoria: