Call-Stack

In der Computersprache ist ein Call-Stack ein Speicherbereich eines Programms, in der Form eines Stapels, in dem sich die Informationen über das Unterprogramm zu einem bestimmten Zeitpunkt aktiv gespeichert organisiert. Es kann als ein Stapel von Eingaben zu funktionieren oder Stapel von Aufrufen von Prozeduren in Abhängigkeit von der Art der Unterroutine involviert übersetzt werden.

Dieser Batterietyp wird oft auch als Ausführungsstapel, Steuerstapels, Funktion Stapel oder Laufzeit-Stack, oder, wenn es keine Verwechslungsgefahr von einfach stapeln.

Der Satz von spezifischen Informationen zu einem Unterprogramm in einem Call-Stack ist der Rahmen.

Betrieb

Der Grund, warum Sie benötigen, um eine Aufruf-Liste zu nehmen ist die Verfolgung der in dem jeder aktive Unterprogramm sollte die Kontrolle zurück, wenn die Ausführung. Wenn beispielsweise ein Unterprogramm-Aufruf Unterprogramm DrawSquare DrawLine von vier verschiedenen Punkten der Code DrawLine Lage sein müssen, zu welchem ​​Zeitpunkt wissen, um die Ausführung zurückkehren beendet ist. Diese Aufgabe wird in der Regel durch den Code für jeden Anruf innerhalb DrawSquare durch Eingabe der Adresse einer speziellen Anweisung nach dem Aufruf in der Call-Stack durchgeführt.

Da der Call-Stack wird als Stack organisiert, legt die aufrufende Funktion die Rücksprungadresse auf den Stack und dem Unterprogrammaufruf, wenn es fertig ist, die Rücksprungadresse von dem Stapel und überträgt die Steuerung an diese Adresse entfernt es. Wenn Sie rufen Sie ein Unterprogramm ein weiteres Unterprogramm aufruft, wird die Rücksprungadresse auf der Aufruf-Liste setzen, und so weiter, wird die Information gestapelt und entfernt, wie durch das Programm erforderlich. Wenn Sie den gesamten verfügbaren Speicherplatz zu verwenden, um den Call-Stack, einen Fehler genannt Stack-Überlauf. Fügen Sie einen Programmaufruf Stapel wird in der Wicklung definiert sind; Entfernen definiert Abwickeln.

Es ist in der Regel nur ein Call-Stack mit einem laufenden Programm verbunden, aber zusätzliche Stapel erstellt werden, um Signale oder kooperatives Multitasking zu behandeln. Da es in diesem Zusammenhang nur eine wichtige, bezieht er sich einfach auf den Stapel.

In Programmiersprachen High-Level-Spezifikationen des Call-Stack aus dem Programmierer verborgen. Letztere hat nur Zugriff auf die Liste von Funktionen und nicht auf den Speicher durch den Stapel besetzt ist, noch die interne Struktur angenommen. Vielen Montage Sprachen auf der anderen Seite erfordert es Programmierern, in der Verwaltungs Stapel einbezogen werden. Die Einzelheiten des Stapels in einer Programmiersprache hängen auch von dem Compiler, das Betriebssystem und den zur Verfügung Anweisungen.

Ziele des Call-Stack

Der primäre Zweck des Call-Stack ist:

  • store Rücksprungadressen - Wenn ein Unterprogramm aufgerufen wird, muss die Adresse des Rück irgendwo gespeichert werden. Mit Hilfe eines Stapels um Rücksprungadressen speichern, müssen wichtige Vorteile gegenüber anderen Alternativen. Eines davon ist, dass jede Aufgabe hat seinen eigenen Stapel und damit das Unterprogramm "bedeckt" werden, und daher können gleichzeitig aktiv für verschiedene Aufgaben, die andere Dinge tun. Ein weiterer Vorteil ist, daß die Rekursion wird automatisch unterstützt. Wenn eine Funktion ruft sich selbst rekursiv auf, muss eine Rücksprungadresse für jeden Aufruf der Funktion aufgezeichnet, um die Rückkehr von jeder Aktivierung der Funktion verwendet werden kann. Diese Funktion ist automatisch mit einem Stapel.

Ein Call-Stack können zusätzliche Zwecke haben, abhängig von der Sprache, Betriebssystem und die Umgebung der Maschine. Darunter:

  • Speichern lokaler Daten - Eine Unterroutine erfordern häufig Speicherplatz, um die Werte der lokalen Variablen, die Variablen nur in dem Unterprogramm aktiv benutzt, und muss nicht die Werte nach der Rückkehr zu halten. Häufig ist es praktisch, um Platz für diese Verwendung zuzuweisen bewegen Sie einfach oben auf den Stapel, um genügend Platz zu haben. Es ist sehr schnell im Vergleich zum Beispiel mit der Zuordnung der Art Heap. Jede unterschiedliche Aktivierung von einem Unterprogramm hat einen eigenen Platz auf dem Stack für lokale Daten.
  • Übergabe von Parametern - Unterprogramme erfordern oft, dass die Werte der Parameter werden durch den Code, der sie berufen vorgesehen, und es ist nicht ungewöhnlich, dass der Raum für diese Parameter kann in der Aufrufliste ist. Allgemein, wenn es nur ein paar kleine Parametern Prozessorregister kann für den Durchgang der Werte verwendet werden, aber wenn es mehr Parameter, um auf diese Weise zu verwalten, ist es erforderlich Speicherplatz. Das Call-Stack funktioniert besser als ein Ort für diese Parameter, zumal jedem Aufruf des Unterprogramms, die verschiedenen Parameterwerte haben wird, wird einen separaten Raum in den Call-Stack für diese Werte zu haben.
  • Auswertungsstapel - Die Operanden für arithmetische und logische Operationen werden häufig in das Register aufgenommen, und es verwendet. Jedoch kann in einigen Situationen, die Operanden auf beliebige Tiefe, was bedeutet, dass mehr als die Register verwendet werden, zu stapeln. Der Stapel von diesen Operanden, ähnlich wie die RPN Rechner-Typ, wird als Auswertungsstapel und können Platz in der Call-Stack zu besetzen.
  • Zeiger des aktuellen - Einige objektorientierten Sprachen, speichern diesen Zeiger als Argument der Funktionen in der Aufruf-Liste beim Aufruf einer Methode. Dieser Zeiger zeigt auf eine Objektinstanz, die mit dem genannten Verfahren verbunden ist. Es ist ein wesentlicher Teil der Ausführungskontext der objektorientierten Sprachen, denn es ermöglicht den Zugriff auf Daten, die von der Objektstrom gehalten. Dieser Zeiger wird auf ein Niveau in der objektorientierten Programmierung mit Ebenen der Laufzeit-Call-Stack verwendet, verbunden ist.
  • Umwelt Gefäße Unterprogramme - Einige Programmiersprachen unterstützen verschachtelte Unterprogramme, so dass eine Routine internen Zugriff auf den Kontext seiner Routine Behälter, das heißt, die Parameter und lokale Variablen in der Umgebung der externen Routine. Solche Sprachen ermöglichen in der Regel die Routinen, um rekursive Aufrufe zu machen, den Erhalt mehrerer Aufruflisten für Anrufe in Routinen der internen Routinen, von denen jedes Ziel der gleichen Umgebung wie die externe Routine. Diese Art von Aufrufrahmen wird auch als Display bezeichnet.
  0   0
Vorherige Artikel Alice von Albany
Nächster Artikel Erzbistum Lille

Kommentare - 0

Keine Kommentare

Fügen Sie einen Kommentar

smile smile smile smile smile smile smile smile
smile smile smile smile smile smile smile smile
smile smile smile smile smile smile smile smile
smile smile smile smile
Zeichen übrig: 3000
captcha