Lebensdauer

"Lebensdauer" ist der Zeitraum der Ausführung eines Programms, in dem eine Variable oder eine Funktion vorhanden ist. Die Speicherdauer des Bezeichners bestimmt dessen Lebensdauer.

Ein Bezeichner, der mit dem Speicherklassenspezifizierer static deklariert wird, weist eine statische Speicherdauer auf. Bezeichner mit statischer Speicherdauer (auch "global" genannt) weisen Speicher und einen definierten Wert für die Dauer eines Programms auf. Speicher wird reserviert, und der gespeicherte Wert des Bezeichners wird nur einmal, und zwar vor dem Programmstart, initialisiert. Ein Bezeichner, der mit externer oder interner Verknüpfung deklariert wird, hat auch eine statische Speicherdauer (Informationen finden Sie unter Verknüpfung).

Ein Bezeichner, der ohne den Speicherklassenspezifizierer static deklariert wird, hat eine automatische Speicherdauer, wenn er innerhalb einer Funktion deklariert wird. Ein Bezeichner mit automatischer Speicherdauer (ein "lokaler Bezeichner") weist Speicher und einen definierten Wert nur innerhalb des Blocks auf, in dem der Bezeichner definiert oder deklariert ist. Bei jedem Wechsel des Programms in diesen Block wird einem automatischen Bezeichner neuer Speicher zugeordnet. Wenn das Programm diesen Block beendet, verliert er seinen Speicher (und den Wert). Bezeichner, die in einer Funktion ohne Bindung deklariert werden, haben auch eine automatische Speicherdauer.

In den folgenden Regeln ist festgelegt, ob ein Bezeichner über eine globale (statische) oder lokale (automatische) Lebensdauer verfügt:

  • Alle Funktionen haben statische Lebensdauer. Daher sind sie während der Programmausführung jederzeit vorhanden. Bezeichner, die auf externer Ebene deklariert werden (also außerhalb aller Blöcke im Programm auf der gleichen Ebene der Funktionsdefinitionen), haben immer eine globale (statische) Lebensdauer.

  • Wenn eine lokale Variable über einen Initialisierer verfügt, wird die Variable jedes Mal bei Erstellung initialisiert (es sei denn, sie ist als static deklariert). Funktionsparameter haben auch eine lokale Lebensdauer. Sie können die globale Lebensdauer für einen Bezeichner innerhalb eines Blocks angeben, indem Sie den Speicherklassenspezifizierer static in die Deklaration einbeziehen. Sobald die Variable als static deklariert wurde, behält sie ihren Wert von einem Eintrag des Blocks zum nächsten.

Obwohl ein Bezeichner mit einer globalen Lebensdauer während der gesamten Ausführung des Quellprogramms vorhanden ist (z. B. eine extern deklarierte Variable oder eine mit dem static -Schlüsselwort deklarierte lokale Variable), ist er möglicherweise nicht in allen Teilen des Programms sichtbar. Weitere Informationen über Sichtbarkeit finden Sie unter Bereich und Sichtbarkeit. Unter Speicherklassen finden Sie eine Erläuterung zum storage-class-specifier-Nichtterminal.

Arbeitsspeicher kann nach Bedarf zugeordnet werden (dynamisch), wenn er durch die Verwendung von speziellen Bibliotheksroutinen wie malloc erstellt wird. Da die dynamische Speicherbelegung Bibliotheksroutinen verwendet, gilt sie nicht als Teil der Sprache. Weitere Informationen zur malloc-Funktion finden Sie in der Laufzeitbibliotheksreferenz.

Siehe auch

Lebensdauer, Bereich, Sichtbarkeit und Verknüpfung