Skip to main content

Was ist ein Schwanzanruf?

Bei der Computerprogrammierung ist ein Tail -Aufruf eine bestimmte Situation innerhalb des Programmquellcode, in der eine Funktion, Unterroutine oder Prozedur einen erwarteten Wert zurückgibt, indem eine andere Funktion aufgerufen wird, anstatt einfach eine Variable zu übermitteln, die den Rückgabewert enthält.Der Name selbst bedeutet, dass die Funktion zur Berechnung des zu zurückgegebenen Werts am Ende oder am Schwanz der Funktion ist, die ihn aufruft, um einen Rückgabewert zu liefern.Ein Schwanzaufruf ist für einige Programmierer von Interesse, da mit bestimmten Optimierungen oder Compiler -Verhaltensweisen kein zusätzlicher Stapelraum verwendet wird, um Code -Standorte der Hauptfunktion zu speichern.Die Schwanzfunktion wird stattdessen verwendet, um die Rückgabewertberichte direkt zum Anrufpunkt zurück zu generieren, an dem die ursprüngliche Funktion aufgerufen wurde.Die Verwendung eines Schwanzaufrufs ist besonders nützlich in Situationen, in denen eine Rekursion eingesetzt wird, da die Menge an Stapelraum zur Speicherung der Anruferadressen in Fällen, in denen die rekursiven Aufrufe sehr tief nisten, schnell ablaufen und die Programmausführung stoppen können.Obwohl die Verwendung von Schwanzaufrufen dazu beitragen kann, die Geschwindigkeit zu erhöhen, Speicherverbrauch und Effizienz in einem Programm, kann er auch zu Situationen führen, in denen der Quellcode umstrukturiert wird, um die Anrufe so zu verwendenRekursion.

Die Existenz eines Schwanzaufrufs ist zum großen Teil darauf zurückzuführen, wie der Anrufstack in den meisten Computerprogrammen und Systemarchitekturen funktioniert.Der Stapel, der wie ein Stapel von Tellern ist, ist eine erste Datenstruktur für die erste In-In-In-In-In-in.Wenn eine Funktion, Unterroutine oder eine Prozedur aufgerufen wird, wird die Adresse, aus der der Anruf getätigt wird, als Stapelrahmen bezeichnet, im Stapel gespeichert.Dies bedeutet ein Programm, das Funktion A aufruft, das dann Funktion B bezeichnet, wird zwei Stapelrahmen haben, eines für die Funktion B und eine andere für die Funktion A. Nach der Ausführung der Funktion B ist der Stapelrahmen von der Oberseite desStack and Execution kehrt zu Funktion A zurück, wobei der Rahmen beim Abschluss des Stapels aus dem Stapel gekommen ist.Eine Funktion verwendet direkt den Rückgabewert einer anderen Funktion als Daten, die an den aufrufenden Code gesendet werden sollen.Wenn die Funktion A Funktion B funktioniert, wird im obigen Beispiel direkt mit der Rücklaufanweisung ein Schwanzaufruf gebildet.Innerhalb des Anrufstacks erhält die Funktion B anstatt einen Stapelrahmen für beide Funktionen A und B zu erhaltenan den Ort, der Funktion A bezeichnete, ohne die Kontrolle zuerst an Funktion zu übergeben. Dies erhöht die Funktionsgeschwindigkeit der Funktionsgeschwindigkeit sowie die Anzahl der Informationen im Stapel.

Die Eigenschaften eines Schwanzaufrufs können erfolgenSie sind eine sehr attraktive Option für rekursive Funktionen.Eine rekursive Funktion ist eine, die sich wiederholt aufruft, um einen Wert zu berechnen, wie es beim Durchlaufen einer Listendatenstruktur der Fall sein kann.Für die verschachtelten Funktionsaufrufe werden keine zusätzlichen Stapelrahmen erstellt, sodass ein sehr tiefes Rekursionsniveau sicher ohne die unmittelbare Gefahr eines Stapelüberlaufs und einer möglichen Programmabgabe durchgeführt werden kann.