Einführung in C-Speicherklassen

Jeder Wert oder jede Zahl muss für die spätere Verwendung an einem Ort gespeichert werden, oder? Dies kann mit Variablen in C geschehen. Variablen sind Speicherbereiche, die in unseren Programmen verwendet werden. Jede Variable hat einen bestimmten Typ, wie z. B. Ganzzahl oder Zeichen, und hat je nach Typ eine bestimmte Größe und ein bestimmtes Layout. Jeder Variablentyp sollte in einem bestimmten Teil des Speichers gespeichert werden und über eingeschränkte oder bestimmte Zugriffsberechtigungen verfügen. Speicherklassen in C bestimmen, in welchem ​​Teil des Speichers jede Variable gespeichert werden soll, und bestimmen auch den Umfang (Sichtbarkeit) der Variablen. Es gibt vier Arten von Speicherklassen: auto, extern, static und register. Neben der Variablen kann ein Speicherspezifizierer angegeben werden.

Arten von Speicherklassen in C

Folgende Arten von Speicherklassen sind in C enthalten

1. Automatische Speicherklasse

Alle innerhalb einer Funktion oder eines Blocks deklarierten Variablen werden standardmäßig in einem automatischen Bezeichner gespeichert, auch wenn dieser nicht explizit definiert ist. Der Bezeichner für diese Speicherklasse ist 'auto'. Der Umfang oder die Sichtbarkeit der Variablen in der automatischen Speicherklasse ist lokal für den Block oder die Funktion, für die sie definiert sind. Die Variable wird zerstört, sobald wir die Funktion oder den Block verlassen haben.

Dies lässt sich anhand eines Beispiels besser erklären. Betrachten Sie das folgende Beispiel:

Code:

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

Ausgabe:

4

2

Hier wird zuerst eine Variable I vom Typ Integer deklariert, der der Wert 2 zugewiesen ist. Als nächstes wird innerhalb einer Schleife oder eines Blocks wieder die Variable I desselben Integer-Typs mit dem zugewiesenen Wert 4 deklariert. Wenn der Speicherspezifizierer nicht erwähnt wird, wird er standardmäßig als automatisch angenommen. In der ersten printf-Anweisung, die innerhalb des Blocks erwähnt wird, wird beim Drucken des Werts von I 4 ausgegeben. Während in der zweiten printf-Anweisung, die außerhalb des Blocks erwähnt wird, wird der Wert von I als 2 ausgegeben, der Wert, der außerhalb erwähnt wird der Block. Es ist besser, einen Wert für Auto-Variablen zu initialisieren, da es manchmal möglich ist, einen Abfallwert zu erhalten, wenn die Initialisierung nicht durchgeführt wird. Dieses Beispiel gibt ein klares Bild der automatischen Variablen und des lokalen Bereichs.

2. Registrieren Sie die Speicherklasse

Die in der Registerspeicherklasse gespeicherten Variablen haben auch einen lokalen Gültigkeitsbereich, dh sie sind nur in dem Block zugänglich oder sichtbar, in dem sie deklariert sind. Diese Speicherung ähnelt der automatischen Speicherung, der Hauptunterschied besteht jedoch darin, dass die automatischen Variablen im Speicher gespeichert werden, während die Registervariablen in den CPU-Registern gespeichert werden. Dies geschieht, wenn wir sehr häufig auf die Variable zugreifen wollen. Diese können schneller verwendet werden. Nur wenige Variablen werden mithilfe von Registerspezifizierern gespeichert. Wenn im Register kein Platz vorhanden ist, wird er nur im Speicher gespeichert. Den Registervariablen ist kein Anfangswert zugeordnet. Der Operator & (Adresse von) kann auch nicht für Registervariablen verwendet werden. Beispielsweise werden Variablen, die für Zähler oder ähnliche Verwendungsarten verwendet werden, unter Verwendung eines Registerspezifizierers gespeichert.

3. Statische Speicherklasse

Variable, ob global oder lokal, werden mithilfe eines statischen Bezeichners in der statischen Speicherklasse gespeichert, wenn die Variable einmal deklariert werden muss und der Wert beibehalten werden muss. Wenn eine Variable als statisch deklariert wird, wird der Wert zwischen den Funktionsaufrufen gespeichert oder beibehalten. Permanenter Speicher wird erstellt und nur einmal deklariert. Wenn eine lokale Variable als statisch deklariert wird, wird ein permanenter Speicher für sie erstellt und der Wert wird bei jeder Verwendung beibehalten. Gemäß dem Gültigkeitsbereich der üblichen lokalen Variablen sind statische lokale Variablen auch nur für die Funktion oder den Block sichtbar, in dem sie definiert sind. Wenn eine globale Variable als statisch deklariert wird, wird ähnlich wie bei statisch lokal ein permanenter Speicher erstellt und nur einmal deklariert. Obwohl es global ist, sind diese Variablen nur in der Datei sichtbar, in der sie definiert sind.

Statische Variablen können anhand des folgenden Beispiels übersichtlich dargestellt werden:

Code:

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

Ausgabe:

2

4

Hier wird im obigen Programm beim Aufruf von samplefunc () die Variable a beim ersten Mal definiert und initialisiert und ein permanenter Speicher dafür erstellt. Durch den in der Funktion verwendeten mathematischen Ausdruck wird der Wert von a dann zu 2. Wenn jedoch dieselbe samplefunc () zum zweiten Mal aufgerufen wird, wird die Variable a nicht definiert oder erneut initialisiert, sondern sie nimmt den letzten gespeicherten Wert und setzt die Operation fort Das Endergebnis wird zu 4. Dies ist die Hauptnutzung und der Hauptvorteil von statischen Variablen.

4. Externe Speicherklasse

Als extern deklarierte Variable zeigt an, dass die Variable an anderer Stelle in einem anderen Programm definiert ist. Diese externen Variablen werden verwendet, wenn eine in einem Programm definierte Variable oder Funktion auch in einer anderen Datei verwendet werden soll. Die Variablen mit externem Bezeichner werden in der externen Speicherklasse gespeichert. Wenn die Variable als extern als Programm deklariert wird, gibt sie die externe Verknüpfung an und wird daher nicht erneut definiert oder initialisiert. Der Speicher wird nur einmal zugeordnet und auch nur einmal initialisiert. Wenn externe Variablen im externen Programm erneut mit einem anderen Wert initialisiert werden, erhalten wir eine Fehlermeldung mit der Meldung 'Redefinition of the variable'.

Externe Variablen werden anhand des folgenden Beispiels erläutert:

Code:

Prg1.c

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

Prg2.c

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

Ausgabe:

10

Hier wird die Ganzzahlvariablenzahl im ersten C-Programm (Prg1.c) deklariert und innerhalb der Hauptfunktion auf den Wert 10 initialisiert. Im zweiten C-Programm wird dieselbe Zählvariable mit Hilfe eines externen Bezeichners deklariert, der dies spezifiziert Es besteht eine externe Verknüpfung, und der Wert wird aus dem Speicher abgerufen, und der Wert 10 wird dem Wert count zugewiesen, wenn wir ihn im zweiten Programm ausdrucken. Dies ist die Verwendung von externen Variablen. Je nach Verwendungszweck werden also die einzelnen Speicherklassen für entsprechende Variablen verwendet und mit den entsprechenden Bezeichnern deklariert.

Empfohlene Artikel

Dies ist eine Anleitung zu den C-Speicherklassen. Hier werden die Arten von Speicherklassen erläutert, zu denen die automatische Speicherklasse, die Registerspeicherklasse, die statische Speicherklasse und die externe Speicherklasse gehören. Weitere Informationen finden Sie auch in den folgenden Artikeln.

  1. Was ist JavaBeans?
  2. ES6 gegen ES5
  3. C ++ gegen Visual C ++
  4. C vs C ++ Leistung