Stack: Unterschied zwischen den Versionen

Aus EINI
Wechseln zu: Navigation, Suche
(Die Seite wurde neu angelegt: „Der '''Stack''' ist ein Teil der Programmumgebung. Der Stack ist ein Speicherbereich, auf dem lokale Variablen liegen und vermerkt werden. Der Stack besteht d…“)
 
 
(6 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
Der '''Stack''' ist ein Teil der Programmumgebung. Der Stack ist ein Speicherbereich, auf dem lokale Variablen liegen und vermerkt werden.
+
Der '''Stack''' ist ein Teil der Programmumgebung. Er ist ein '''Speicherbereich''', in dem Platz für [[Methode|Methodenaufrufe]] und ihre [[lokale Variablen]] reserviert wird.
  
Der Stack besteht dabei aus meheren sog. '''Stackframes'''. Ein Stackframe ist ein Speicherbereich, in dem lokale Variablen eines Methodenaufrufes gespeichert werden. Ein Stackframe hat dabei konstante Größe, da die Anzahl und Größe der in einem Funktionsaufruf verwendeten Variablen immer im voraus bekannt sind (dafür müssen Variablen schließlich immer manuell deklariert werden). Wird eine Methode nun von einer anderen aufgerufen, so wird auf dem Stack der Stackframe der aufgerufenen Methode gelegt. Ist die Methode abgearbeitet und kehrt zurück zur aufrufenden Methode, wird der Stackframe der aufgerufenen Methode vom Stack entfernt.
+
Der Stack steht dem [[Heap (Speicher)|Heap]] gegenüber, in dem Speicher für [[Objekt]]e reserviert wird.
 +
 
 +
=Aufbau und Funktion=
 +
 
 +
Der Stack besteht aus mehreren sogenannten '''Stackframes'''. Ein Stackframe ist ein Speicherbereich, in dem lokale Variablen eines Methodenaufrufes gespeichert werden. Er hat eine '''konstante Größe''', da die Anzahl und Größe der in einem Funktionsaufruf verwendeten Variablen durch deren Deklaration immer im Voraus bekannt sind.  
 +
 
 +
Wird eine Methode von einer anderen aufgerufen, so wird der Stackframe der aufgerufenen Methode auf den Stack gelegt. Ist die Methode abgearbeitet und es wird zu der aufrufenden Methode zurückgekehrt, wird der Stackframe der aufgerufenen Methode vom Stack entfernt.
 +
 
 +
Daher kommt der Name dieses Speicherbereiches: Wie bei einem Stapel kann nur das oberste Element erreicht werden kann und man muss erst das oberste Element vom Stapel entfernen, um an das darunter liegende Element zu kommen.
 +
 
 +
Der Stackframe der sich gerade '''in Ausführung''' befindenden Methode liegt immer ganz '''oben''' auf dem Stack. Der Stackframe unter diesem ist der Stackframe der Methode, zu der zurückgekehrt wird.
 +
 
 +
Der unterste Stackframe ist entsprechend immer der der '''[[main]]-Methode'''. Wird dieser Stackframe entfernt, ist der Stack leer und das Programm beendet.

Aktuelle Version vom 2. Mai 2016, 16:01 Uhr

Der Stack ist ein Teil der Programmumgebung. Er ist ein Speicherbereich, in dem Platz für Methodenaufrufe und ihre lokale Variablen reserviert wird.

Der Stack steht dem Heap gegenüber, in dem Speicher für Objekte reserviert wird.

Aufbau und Funktion

Der Stack besteht aus mehreren sogenannten Stackframes. Ein Stackframe ist ein Speicherbereich, in dem lokale Variablen eines Methodenaufrufes gespeichert werden. Er hat eine konstante Größe, da die Anzahl und Größe der in einem Funktionsaufruf verwendeten Variablen durch deren Deklaration immer im Voraus bekannt sind.

Wird eine Methode von einer anderen aufgerufen, so wird der Stackframe der aufgerufenen Methode auf den Stack gelegt. Ist die Methode abgearbeitet und es wird zu der aufrufenden Methode zurückgekehrt, wird der Stackframe der aufgerufenen Methode vom Stack entfernt.

Daher kommt der Name dieses Speicherbereiches: Wie bei einem Stapel kann nur das oberste Element erreicht werden kann und man muss erst das oberste Element vom Stapel entfernen, um an das darunter liegende Element zu kommen.

Der Stackframe der sich gerade in Ausführung befindenden Methode liegt immer ganz oben auf dem Stack. Der Stackframe unter diesem ist der Stackframe der Methode, zu der zurückgekehrt wird.

Der unterste Stackframe ist entsprechend immer der der main-Methode. Wird dieser Stackframe entfernt, ist der Stack leer und das Programm beendet.