Bei der Computerprogrammierung ist eine statische Variable eine Variable, die "statisch" zugewiesen wurde. Dies bedeutet, dass ihre Lebensdauer (oder "Ausdehnung") der gesamte Programmlauf ist. Dies steht im Gegensatz zu automatischeren Variablen mit kurzer Lebensdauer, deren Speicher auf dem Aufrufstapel Stack zugewiesen und freigegeben wird. und im Gegensatz zu Objekten, deren Speicher dynamisch im Heap-Speicher zugewiesen und freigegeben wird.
Die Lebensdauer der Variablen steht im Gegensatz zum Gültigkeitsbereich (in dem eine Variable verwendet werden kann): "global" und "local" beziehen sich auf den Gültigkeitsbereich, nicht auf die Gültigkeitsdauer, der Gültigkeitsbereich impliziert jedoch häufig die Gültigkeitsdauer. In vielen Sprachen sind globale Variablen immer statisch, in einigen Sprachen jedoch dynamisch, während lokale Variablen im Allgemeinen automatisch sind, aber auch statisch sein können.
Im Allgemeinen ist die statische Speicherzuweisung die Speicherzuweisung zur Kompilierungszeit, bevor das zugehörige Programm ausgeführt wird, im Gegensatz zur dynamischen Speicherzuweisung oder automatischen Speicherzuweisung, bei der der Speicher zur Laufzeit nach Bedarf zugewiesen wird. 19659006] History [ edit ]
Statische Variablen datieren mindestens auf ALGOL 60 (1960), wo sie als eigene -Variablen bekannt sind:
Eine Deklaration kann mit dem Zusatzdeklarator eigenen gekennzeichnet werden. Dies hat folgende Auswirkung: Bei einem Wiedereintritt in den Block bleiben die Werte der eigenen -Mengen von ihren Werten am letzten Ausgang unverändert, während die Werte der deklarierten Variablen, die nicht mit own ist nicht definiert.
- Überarbeiteter Bericht zu ALGOL 60, Abschnitt "5. Erklärungen", p. 14
Diese Definition unterscheidet sich geringfügig von einer statischen Variablen: Sie gibt nur das Verhalten und damit die Lebensdauer an, nicht den Speicher. Eine eigene Variable kann zugewiesen werden, wenn zum Beispiel eine Funktion zum ersten Mal aufgerufen wird, und nicht zum Zeitpunkt des Programmladens.
Der Begriff statisch bezieht sich auf diese Variablen mindestens auf BCPL (1966) und wurde durch die Programmiersprache C populär gemacht, die stark von BCPL beeinflusst wurde. Die BCPL-Definition lautet:
(1) Statische Datenelemente:
Die Datenelemente, deren Ausdehnung so lange dauert wie die Programmausführungszeit; solche Datenelemente haben manifestierte konstante L-Werte. Jedes statische Datenelement muss entweder in einer Funktions- oder Routinedefinition, in einer globalen Deklaration oder als durch Doppelpunkt definierte Bezeichnung deklariert worden sein.- Das BCPL-Referenzhandbuch, 7.2 Speicherzuordnung und Ausdehnung von Datenelementen
Beachten Sie, dass BCPL ein "dynamisches Datenelement" für die jetzt als automatische -Variable definierte Variable definiert hat. Stapelzuordnung), nicht für Heap-zugewiesene Objekte, was die derzeitige Verwendung des Begriffs dynamische Zuordnung ist.
Das Schlüsselwort static
wird in C und verwandten Sprachen sowohl für statische Variablen als auch für andere Begriffe verwendet.
Adressierung [ edit ]
Der Adressmodus für absolute Adressen kann nur mit statischen Variablen verwendet werden, da dies die einzigen Arten von Variablen sind, deren Position dem Compiler zur Kompilierzeit bekannt ist . Wenn das Programm (ausführbare Datei oder Bibliothek) in den Speicher geladen wird, werden statische Variablen im Datensegment des Adressraums des Programms (wenn initialisiert) oder des BSS-Segments (falls nicht initialisiert) gespeichert und in entsprechenden Abschnitten der Objektdateien zuvor gespeichert zum Laden.
In Bezug auf Umfang und Ausdehnung haben statische Variablen den gesamten Programmablauf, jedoch kann der Umfang eingeschränkt sein. Ein grundlegender Unterschied ist zwischen einer statischen globalen -Variable die globalen Geltungsbereich hat und somit im gesamten Programm in Zusammenhang steht, und einer statischen lokalen Variablen, die lokalen Geltungsbereich hat. Eine statische lokale Variable unterscheidet sich von einer lokalen Variablen, da eine statische lokale Variable nur einmal initialisiert wird, unabhängig davon, wie oft die Funktion aufgerufen wird, in der sie sich befindet, und ihr Wert erhalten bleibt und durch viele Aufrufe der Funktion, in der sie deklariert ist, zugänglich ist , z.B als Zählvariable verwendet werden. Eine statische Variable kann auch einen Modulbereich oder eine Variante haben, wie zum Beispiel die interne Verknüpfung in C, bei der es sich um eine Form des Datei- oder Modulbereichs handelt.
Beispiel [ edit ]
Ein Beispiel für eine statische lokale Variable in C:
#include void func () { statisch int x = 0 / * x wird nur einmal über fünf Aufrufe von func () initialisiert. Die Variable wird nach diesen Aufrufen fünfmal erhöht. Der Endwert von x ist 5. * / x ++ ; printf ( "% d" n x ); // gibt den Wert von x } int main () { // int argc, char aus * argv [] im main ist optional in dem speziellen Programm func (); // druckt 1 func (); // druckt 2 ] func (); // druckt 3 func (); // druckt 4 func (); // druckt 5 [5] 19659030] return 0 ; }
Objektorientierte Programmierung [ edit ]
Bei der objektorientierten Programmierung gibt es auch das Konzept von a statische Membervariable eine "Klassenvariable" einer statisch definierten Klasse, dh eine Membervariable einer bestimmten Klasse, die von allen Instanzen (Objekten) gemeinsam genutzt wird und auf die zugegriffen werden kann Datei als Member-Variable dieser Objekte. Eine Klassenvariable einer dynamisch definierten Klasse in Sprachen, in denen Klassen zur Laufzeit definiert werden können, wird bei der Definition der Klasse zugewiesen und ist nicht statisch.
Zum Zeitpunkt der Kompilierung bekannte Objektkonstanten, wie z. B. Zeichenfolgenliterale, werden normalerweise statisch zugewiesen. Bei der objektorientierten Programmierung werden die virtuellen Methodentabellen von Klassen normalerweise statisch zugeordnet. Ein statisch definierter Wert kann auch global sein, um sicherzustellen, dass derselbe unveränderliche Wert während eines Laufs verwendet wird, um die Konsistenz zu gewährleisten.
Siehe auch [ edit ]
- ^ Jack Rons. Msgstr "Was ist statische Speicherzuweisung und dynamische Speicherzuordnung?" http://www.merithub.com/: MeritHub [An Institute of Career Development]. 2011-06-16 abgerufen.
Der Compiler weist für eine deklarierte Variable den erforderlichen Speicherplatz zu. Durch Verwendung des Operators addressof wird die reservierte Adresse erhalten und diese Adresse kann einer Zeigervariable zugewiesen werden. Da die meisten deklarierten Variablen über einen statischen Speicher verfügen, wird diese Art der Zuweisung eines Zeigerwerts zu einer Zeigervariable als statische Speicherzuordnung bezeichnet. Speicher wird während der Kompilierungszeit zugewiesen.
No comments:
Post a Comment