C ++ - Speicherklasse: Lokal, Global, Statisch, Register und Thread Lokal

In diesem Artikel erfahren Sie mehr über verschiedene Speicherklassen in C ++. Nämlich: lokal, global, statisch lokal, Register und Thread lokal.

Jede Variable in C ++ verfügt über zwei Funktionen: Typ und Speicherklasse.

Typ gibt den Datentyp an, der in einer Variablen gespeichert werden kann. Zum Beispiel: int, float, charusw.

Die Speicherklasse steuert zwei verschiedene Eigenschaften einer Variablen: Lebensdauer (bestimmt, wie lange eine Variable existieren kann) und Gültigkeitsbereich (bestimmt, welcher Teil des Programms darauf zugreifen kann).

Abhängig von der Speicherklasse einer Variablen kann sie in vier Haupttypen unterteilt werden:

  • Lokale Variable
  • Globale Variable
  • Statische lokale Variable
  • Variable registrieren
  • Thread Local Storage

Lokale Variable

Eine in einer Funktion definierte Variable (innerhalb des Funktionskörpers zwischen geschweiften Klammern definiert) wird als lokale Variable oder automatische Variable bezeichnet.

Sein Umfang ist nur auf die Funktion beschränkt, in der er definiert ist. In einfachen Worten, lokale Variablen existieren und können nur innerhalb einer Funktion aufgerufen werden.

Die Lebensdauer einer lokalen Variablen endet (sie wird zerstört), wenn die Funktion beendet wird.

Beispiel 1: Lokale Variable

 #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; )

Die Variable var kann nicht innerhalb test()und var1 kann nicht innerhalb der main()Funktion verwendet werden.

Das Schlüsselwort autowurde auch zum Definieren lokaler Variablen verwendet:auto int var;

Nach C ++ 11 autohat dies jedoch eine andere Bedeutung und sollte nicht zum Definieren lokaler Variablen verwendet werden.

Globale Variable

Wenn eine Variable außerhalb aller Funktionen definiert ist, wird sie als globale Variable bezeichnet.

Der Umfang einer globalen Variablen ist das gesamte Programm. Dies bedeutet, dass es nach seiner Deklaration in jedem Teil des Programms verwendet und geändert werden kann.

Ebenso endet seine Lebensdauer nur, wenn das Programm endet.

Beispiel 2: Globale Variable

 #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.

Interessante Beiträge...