Skip to main content

Cos'è una chiamata di coda?

Nella programmazione del computer, una chiamata di coda è una situazione specifica all'interno del codice sorgente del programma in cui una funzione, una subroutine o una procedura restituisce un valore atteso chiamando un'altra funzione invece di passare semplicemente una variabile con il valore di restituzione.Il nome stesso indica che la funzione chiamata per calcolare il valore da restituire è alla fine, o coda, della funzione che lo chiama per fornire un valore di reso.Una chiamata di coda è interessante per alcuni programmatori perché, con alcune ottimizzazioni o comportamenti del compilatore, non viene utilizzato spazio aggiuntivo per archiviare le posizioni del codice della funzione principale;La funzione di coda invece viene utilizzata per generare i rapporti sul valore di ritorno direttamente al punto di chiamata in cui è stata invocata la funzione originale.L'uso di una chiamata di coda è particolarmente utile in situazioni in cui viene impiegata la ricorsione, poiché la quantità di spazio dello stack utilizzato per archiviare gli indirizzi del chiamante nei casi in cui le chiamate ricorsive nido molto profondamente potrebbero esaurire rapidamente e interrompere l'esecuzione del programma.Sebbene l'uso di chiamate di coda possa aiutare ad aumentare la velocità, l'utilizzo della memoria e l'efficienza in un programma, può anche portare a situazioni in cui il codice sorgente è ristrutturato per utilizzare le chiamate in modo difficile da debug e traccia, in particolare con i casi di casiricorsione.

L'esistenza di una chiamata di coda è dovuta in gran parte a come funziona lo stack di chiamata all'interno della maggior parte dei programmi per computer e architetture di sistema.Lo stack, che è come uno stack di piastre, è una struttura di dati di ultima e di ultima.Quando viene chiamata una funzione, una subroutine o una procedura, l'indirizzo da cui viene effettuata la chiamata, chiamata frame stack, viene memorizzata nello stack.Questo significaLo stack ed esecuzione ritorna alla funzione A, che ha il suo frame è saltato fuori dallo stack quando è stato fatto, restituendo infine il controllo del programma al punto da cui veniva originariamente chiamato la prima funzione.

Quando viene utilizzata una chiamata di coda, l'istruzione di ritorno inUna funzione utilizza direttamente il valore di ritorno di un'altra funzione come dati da inviare al codice chiamante.Nell'esempio sopra, se la funzione A chiama la funzione B direttamente con l'istruzione di ritorno, è stata formata una chiamata di coda.All'interno dello stack di chiamata, invece di avere un frame stack per entrambe le funzioni A e B, la funzione B riceverà l'indirizzo di ritorno dalla funzione A e il frame dello stack della funzione A verrà messo a punto e disposto, il che significa che la funzione B passerà il suo valore di ritorno direttamente indietro indietronella posizione che chiamava la funzione A senza prima di dover passare il controllo per la funzione A. Ciò aumenta la velocità delle chiamate di funzione e contribuendo a mantenere la quantità di informazioni nello stack.

Le proprietà di una chiamata di coda possono effettuareloro un'opzione molto interessante per le funzioni ricorsive.Una funzione ricorsiva è quella che si chiama ripetutamente per calcolare un valore, così come si può attraversare una struttura di dati dell'elenco.Non sono stati creati ulteriori frame dello stack per le chiamate di funzione nidificata, quindi i livelli molto profondi di ricorsione possono essere eseguiti in modo sicuro senza la minaccia immediata di uno stack overflow e una possibile risoluzione del programma.