Wat is een staartoproep?

In computerprogrammering is een staartoproep een specifieke situatie in de broncode van het programma waarin een functie, subroutine of procedure een verwachte waarde retourneert door een andere functie op te roepen in plaats van eenvoudig een variabele door te geven die de retourwaarde vasthoudt. De naam zelf geeft aan dat de functie die wordt opgeroepen om de te regeren waarde te berekenen aan het einde is, of staart, van de functie die het oproept om een ​​retourwaarde te leveren. Een staartoproep is van belang voor sommige programmeurs omdat, met bepaalde optimalisaties of compilergedrag, geen extra stapelruimte wordt gebruikt om codelocaties van de hoofdfunctie op te slaan; De staartfunctie wordt in plaats daarvan gebruikt om de rapporten van de retourwaarde rechtstreeks terug te genereren naar het oproeppunt waar de oorspronkelijke functie werd opgeroepen. Het gebruik van een staartoproep is met name handig in situaties waarin recursie wordt gebruikt, omdat de hoeveelheid stapelruimte die wordt gebruikt om de beller -adressen op te slaan in gevallen waarin de recursieve oproepen Nest heel diep kunnen raken en progra kunnen stoppen en stoppenm uitvoering. Hoewel het gebruik van staartoproepen de snelheid, het geheugengebruik en de efficiëntie in een programma kan verhogen, kan dit ook leiden tot situaties waarin de broncode wordt geherstructureerd om de oproepen te gebruiken op een manier die het moeilijk maakt om te debuggen en te volgen, vooral met gevallen van recursie.

Het bestaan ​​van een staartoproep is grotendeels te danken aan hoe de call -stack werkt binnen de meeste computerprogramma's en systeemarchitecturen. De stapel, die als een stapel platen is, is een first-in, laatste gegevensstructuur. Wanneer een functie, subroutine of procedure wordt opgeroepen, wordt het adres van waaruit de oproep wordt gedaan, een stapel frame genoemd, opgeslagen in de stapel. Dit betekent dat een programma dat functie A oproept, dat vervolgens functie B oproept, twee stapelframes heeft, een voor functie B en een andere eronder voor functie Akeert terug naar functie A, waarbij zijn frame van de stapel wordt geopt wanneer het klaar is, eindelijk de programmabesturing terugstuurt naar het punt waaruit de eerste functie oorspronkelijk werd opgeroepen.

Wanneer een staartaanroep wordt gebruikt, gebruikt de retourinstructie in een functie direct de retourwaarde van een andere functie als de gegevens die naar de aanroepcode moeten worden verzonden. In het bovenstaande voorbeeld, als de functie A -oproepen Functie B rechtstreeks met de retourinstructie oproepen, is er een staartaanroep gevormd. Binnen de oproepstapel ontvangt functie B in plaats van een stapel frame voor beide functies A en B, het retouradres van functie A en de stapelframe van de functie A zal worden opgedaan en verwijderd, wat betekent dat functie B de retourwaarde rechtstreeks terug zal geven aan de locatie die functie A moet doorgeven.

De eigenschappen van een staartoproep kunnen ze een zeer makenAantrekkelijke optie voor recursieve functies. Een recursieve functie is er een die zichzelf herhaaldelijk roept om een ​​waarde te berekenen, zoals het geval kan zijn bij het doorkruisen van een lijstgegevensstructuur. Er worden geen extra stapelframes gemaakt voor de geneste functieoproepen, dus zeer diepe niveaus van recursie kunnen veilig worden uitgevoerd zonder de onmiddellijke dreiging van een stapeloverloop en mogelijke programma -beëindiging.

ANDERE TALEN