Skip to main content

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 opkomen en de uitvoering van het programma kunnen stoppen.Hoewel het gebruik van staartoproepen de snelheid, geheugengebruik en 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 vanRecursie.

Het bestaan van een staartoproep is grotendeels te wijten 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 aanroept, die vervolgens functie B oproept, twee stapelframes heeft, een voor functie B en een andere eronder voor functie AStapel en uitvoering keren 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 aangeroepen.

Wanneer een staartoproep wordt gebruikt, de retourinstructie inEen functie gebruikt 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 het stackframe van de functie A wordt geplukt en verwijderd, wat betekent dat functie B de retourwaarde rechtstreeks terug zal gevennaar de locatie die functie A noemde zonder eerst de controle terug te geven aan functie A. Dit verhoogt de snelheid van functieaanroepen en helpt de hoeveelheid informatie in de stapel te behouden.

De eigenschappen van een staartoproep kunnen makenze een zeer aantrekkelijke 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.