Classe di archiviazione C ++: locale, globale, statico, registro e thread locale

In questo articolo imparerai a conoscere diverse classi di archiviazione in C ++. Vale a dire: locale, globale, locale statico, registro e thread locale.

Ogni variabile in C ++ ha due caratteristiche: tipo e classe di archiviazione.

Tipo specifica il tipo di dati che possono essere memorizzati in una variabile. Ad esempio: int, float, charetc.

Inoltre, la classe di archiviazione controlla due diverse proprietà di una variabile: durata (determina per quanto tempo può esistere una variabile) e ambito (determina quale parte del programma può accedervi).

A seconda della classe di archiviazione di una variabile, può essere suddivisa in 4 tipi principali:

  • Variabile locale
  • Variabile globale
  • Variabile locale statica
  • Variabile di registro
  • Archiviazione locale del thread

Variabile locale

Una variabile definita all'interno di una funzione (definita all'interno del corpo della funzione tra parentesi graffe) è chiamata variabile locale o variabile automatica.

Il suo ambito è limitato solo alla funzione in cui è definito. In termini semplici, la variabile locale esiste ed è possibile accedervi solo all'interno di una funzione.

La vita di una variabile locale termina (viene distrutta) quando la funzione esce.

Esempio 1: variabile locale

 #include using namespace std; void test(); int main() ( // local variable to main() int var = 5; test(); // illegal: var1 not declared inside main() var1 = 9; ) void test() ( // local variable to test() int var1; var1 = 6; // illegal: var not declared inside test() cout << var; )

La variabile var non può essere utilizzata all'interno test()e var1 non può essere utilizzata all'interno della main()funzione.

La parola chiave è autostata utilizzata anche per definire le variabili locali prima come:auto int var;

Ma dopo C ++ 11 autoha un significato diverso e non dovrebbe essere usato per definire le variabili locali.

Variabile globale

Se una variabile è definita al di fuori di tutte le funzioni, viene chiamata variabile globale.

Lo scopo di una variabile globale è l'intero programma. Ciò significa che può essere utilizzato e modificato in qualsiasi parte del programma dopo la sua dichiarazione.

Allo stesso modo, la sua vita finisce solo quando il programma finisce.

Esempio 2: variabile globale

 #include using namespace std; // Global variable declaration int c = 12; void test(); int main() ( ++c; // Outputs 13 cout << c < 

Output

 13 14

In the above program, c is a global variable.

This variable is visible to both functions main() and test() in the above program.

Static Local variable

Keyword static is used for specifying a static variable. For example:

… int main() ( static float a;… ) 

A static local variable exists only inside a function where it is declared (similar to a local variable) but its lifetime starts when the function is called and ends only when the program ends.

The main difference between local variable and static variable is that, the value of static variable persists the end of the program.

Example 3: Static local variable

 #include using namespace std; void test() ( // var is a static variable static int var = 0; ++var; cout << var << endl; ) int main() ( test(); test(); return 0; )

Output

 1 2

In the above program, test() function is invoked 2 times.

During the first call, variable var is declared as static variable and initialized to 0. Then 1 is added to var which is displayed in the screen.

When the function test() returns, variable var still exists because it is a static variable.

During second function call, no new variable var is created. The same var is increased by 1 and then displayed to the screen.

Output of above program if var was not specified as static variable

 1 1

Register Variable (Deprecated in C++11)

Keyword register is used for specifying register variables.

Register variables are similar to automatic variables and exists inside a particular function only. It is supposed to be faster than the local variables.

If a program encounters a register variable, it stores the variable in processor's register rather than memory if available. This makes it faster than the local variables.

However, this keyword was deprecated in C++11 and should not be used.

Thread Local Storage

Thread-local storage is a mechanism by which variables are allocated such that there is one instance of the variable per extant thread.

Keyword thread_local is used for this purpose.

Learn more about thread local storage.

Articoli interessanti...