C Spicherklassen?
Schönen guten Abend allerseits!
Ich lerne derzeit ein wenig die Programmiersprache C.
Letztens habe ich etwas über Speicherklassen gelesen - diese sind mir allerdings noch nicht ganz klar.
Ich weiß zum Beispiel, dass die Speicherklasse auto dafür sorgt, dass die Variable in ihrem Lokalen Gültigkeitsbereich gültig ist und dies ohnehin das Standarderhalten ist.
Dann weiß ich noch, dass in Funktionen mit der Speicherklasse static gekennzeichnete Variablen nicht auf dem Stack abgelegt werden, sondern eine feste Speicheradresse.
Doch was ist, wenn man Variablen und Funktionen mit den Speicherklassen extern, static oder volatile definiert?
Was die Speicherklasse register bewirkt, weiß ich auch.
Danke schon mal im Voraus!
2 Antworten
![](https://images.gutefrage.net/media/default/user/12_nmmslarge.png?v=1551279448000)
extern ist eine auschließliche Deklaration.
Für eine Definition ist auto der default.
Was ist das ? Eine Deklaration gibt an, dass es so eine Variable gibt, Definition sorgt dafür, dass Speicher für diese vom Compiler, d.h. eine Adresse und eine Größe definiert sind.
In C gehört das zusammen, außer Du benutzt das Schlüsselwort extern, dann heißt das, dass diese Variable bereits definiert wurde und existiert, also an dieser Stelle wiederverwendet wird (https://www.geeksforgeeks.org/difference-between-definition-and-declaration/).
volatile heißt, dass die Variable sich ändern kann, ohne dass Deine Programmdatei(en) bzw. der laufende Prozess diese Veränderung durchführt (Nebenläufigkeit). Dadurch verhindert man Optimierungen durch den Compiler, der in diesem Fall immer auf den tatsächlichen Wert zugreifen muss. Dazu gibt es detaillierte Erklärungen https://de.wikipedia.org/wiki/Volatile_(Informatik).
static ist wie du beschrieben hast eine Variable, die bei lokalen (Function Scope) nicht über den Stack bereitgestellt wird, sondern eine feste Adresse besitzt. Werte einer statische Variablen bleiben bei lokalen Variablen bspws. über einen Funktionsaufruf hinaus erhalten. (https://www.geeksforgeeks.org/static-variables-in-c/).
![](https://images.gutefrage.net/media/user/Palladin007/1513698609789_nmmslarge__202_0_980_980_9cc06b25d33a80bd7adc221dae634818.jpg?v=1513698610000)
Ich bin kein C-Experte, aber volatile gibt's bei C# auch und das Konzept dürfte ähnlich sein. Was das tut, wusste ich vorher schon grob, aber die technischen Zusammenhänge habe ich erst seit dieser Erklärung verstanden:
https://www.mycsharp.de/wbb2/thread.php?threadid=123161#post3825822