Statische Variable

Im Computerprogrammierung, a Statische Variable ist ein Variable das war zugewiesen "statisch", was bedeutet, dass es es ist Lebensdauer (oder "Ausmaß") ist der gesamte Lauf des Programms. Dies steht im Gegensatz zu kürzer gelebt Automatische Variablen, deren Speicher ist Stack zugewiesen und auf die verkauft Rufen Sie Stack an; und im Gegensatz zu Objekte, deren Speicher ist dynamisch zugewiesen und eingetäuscht Heap -Speicher.

Variable Lebensdauer wird im Gegensatz zu Umfang (Wo eine Variable verwendet werden kann): "Global" und "Lokal" beziehen sich auf den Umfang, nicht auf Lebensdauer, aber der Umfang impliziert oft Lebensdauer. In vielen Sprachen, globale Variablen sind immer statisch, aber in einigen Sprachen sind sie dynamisch Lokale Variablen sind im Allgemeinen automatisch, können aber statisch sein.

Im Algemeinen, Statische Speicherzuweisung ist die Zuweisung des Speichers bei Zeit kompilieren, bevor das zugehörige Programm ausgeführt wird, im Gegensatz zu Dynamische Speicherzuweisung oder Automatische Speicherzuweisung wo der Speicher nach Bedarf zugewiesen wird Laufzeit.[1]

Geschichte

Statische Variablen datieren mindestens zu Algol 60 (1960), wo sie als bekannt sind als besitzen Variablen:

Eine Deklaration kann mit dem zusätzlichen Deklarator gekennzeichnet sein besitzen. Dies hat den folgenden Effekt: auf einen Wiedereintritt in den Block, die Werte von besitzen Die Größen werden von ihren Werten am letzten Ausgang unverändert, während die Werte deklarierter Variablen, die nicht mit markiert sind besitzen ist nicht definiert.

-Überarbeiteter Bericht über Algol 60, Abschnitt "5. Deklarationen", p. 14

Diese Definition unterscheidet sich subtil von einer statischen Variablen: Sie gibt nur das Verhalten an und daher kann eine Lebensdauer und nicht die Speicherung: Eine eigene Variable kann zugewiesen werden, wenn eine Funktion zum Beispiel zum ersten Mal aufgerufen wird, und nicht zur Programmladezeit.

Die Verwendung des Wortes statisch Um sich auf diese Variablen zu beziehen, stammt zumindest auf BCPL (1966) und wurde von der populär gemacht C Programmiersprache, was stark von BCPL beeinflusst wurde. Die BCPL -Definition lautet:

(1) Statische Datenelemente:
Diese Datenelemente, deren Ausmaß so lange dauert wie die Ausführungszeit; Solche Datenelemente haben offensichtliche konstante Lvalues. Jedes statische Datenelement muss entweder in einer Funktion oder in einer routinemäßigen Definition, in einer globalen Erklärung oder als von Colon festgelegter Etikett deklariert worden sein.

-Das BCPL -Referenzhandbuch, 7.2 Raumzuweisung und das Ausmaß der Datenelemente

Beachten Sie, dass BCPL ein "dynamisches Datenelement" für das definierte automatisch Variable (lokal, stapelalloziert), nicht für haufenallozierte Objekte, was die aktuelle Verwendung des Begriffs ist dynamische Zuweisung.

Das statisch Stichwort wird in C und verwandten Sprachen sowohl für statische Variablen als auch für andere Konzepte verwendet.

Adressierung

Das Absolute Adresse Adressierungsmodus Kann nur mit statischen Variablen verwendet werden, da dies die einzigen Arten von Variablen sind, deren Ort zum Kompilierzeit vom Compiler bekannt ist. Wenn das Programm (ausführbare Datei oder Bibliothek) ist geladen In das Gedächtnis werden statische Variablen in der gespeichert Datensegment des Programms Adressraum (falls initialisiert) oder der BSS -Segment (falls nicht initialisiert) und werden in entsprechenden Abschnitten von gespeichert Objektdateien vor dem Laden.

Zielfernrohr

Bezüglich Umfang und Umfang, statische Variablen haben den gesamten Lauf des Programms, aber möglicherweise nur begrenzter Umfang. Eine grundlegende Unterscheidung ist zwischen a Statische globale Variable, der globalen Umfang hat und somit im gesamten Programm im Kontext steht, und a Statische lokale Variable, Welches hat einen lokalen Umfang. Eine statische lokale Variable unterscheidet sich von einer lokalen Variablen, da eine statische lokale Variable nur einmal initialisiert wird, egal wie oft die Funktion, in der sie sich befindet , z.B. als Zählvariable verwendet werden. Eine statische Variable kann auch haben Modulbereich oder eine Variante, wie z. interne Verknüpfung in C, was eine Form des Dateiumfangs oder des Modulbereichs ist.

Beispiel

Ein Beispiel für eine statische lokale Variable in C:

#enthalten  Leere Func() {   statisch int x = 0;   // | x | wird nur einmal über fünf Anrufe von | func initialisiert | und die Variable   // wird nach diesen Anrufen fünfmal inkrementiert. Der Endwert von | x |   // wird 5 sein.   x++;   printf("%d\n", x);  // Ausgibt den Wert von | x | } int hauptsächlich() {   Func();  // Drucke 1   Func();  // Drucke 2   Func();  // Drucke 3   Func();  // Drucke 4   Func();  // Drucke 5   Rückkehr 0; } 

Objekt orientierte Programmierung

Im Objekt orientierte ProgrammierungEs gibt auch das Konzept von a statische Mitgliedsvariable, die ein "Klassenvariable"einer statisch definierten Klasse, d. H. a Mitgliedsvariable einer bestimmten Klasse, die über alle geteilt wird Instanzen (Objekte) und ist als Mitgliedsvariable dieser Objekte zugänglich. Eine Klassenvariable einer dynamisch definierten Klasse in Sprachen, in denen Klassen zur Laufzeit definiert werden können, wird zugewiesen, wenn die Klasse definiert ist und nicht statisch ist.

Objektkonstanten, die zur Kompilierungszeit bekannt sind, wie z. String -Literale, werden normalerweise statisch zugeordnet. In objektorientierter Programmierung die Virtuelle Methodentabellen von Klassen werden normalerweise statisch zugewiesen. Ein statisch definierter Wert kann auch sein global in seinem Zielfernrohr sicherstellen unveränderlich Der Wert wird während eines Laufs für Konsistenz verwendet.

Siehe auch

Anmerkungen

  1. ^ Jack Rons. "Was ist die statische Speicherzuweisung und die dynamische Speicherzuweisung?". Merithub [ein Institut für Karriereentwicklung]. Abgerufen 2011-06-16. Der Compiler weist den erforderlichen Speicherplatz für eine deklarierte Variable zu. Durch die Verwendung des Adresse des Adresse wird die reservierte Adresse erhalten und diese Adresse kann einer Zeigervariablen zugewiesen werden. Da die meisten deklarierten Variablen einen statischen Speicher haben, wird diese Art der Zeigerwert einer Zeigervariablen als statische Speicherzuweisung bezeichnet. Der Speicher wird während der Kompilierungszeit zugewiesen.

Verweise