Skip to main content

Qu'est-ce qu'un appel à queue?

Dans la programmation informatique, un appel de queue est une situation spécifique dans le code source du programme dans lequel une fonction, un sous-programme ou une procédure renvoie une valeur attendue en appelant une autre fonction au lieu de simplement passer une variable tenant la valeur de retour.Le nom lui-même indique que la fonction appelée pour calculer la valeur à retourner est à la fin, ou queue, de la fonction l'appelant pour fournir une valeur de retour.Un appel à queue intéresse certains programmeurs car, avec certaines optimisations ou comportements du compilateur, aucun espace de pile supplémentaire n'est utilisé pour stocker des emplacements de code de la fonction principale;La fonction de queue est plutôt utilisée pour générer les rapports de valeur de retour directement au point d'appel où la fonction d'origine a été invoquée.L'utilisation d'un appel à queue est particulièrement utile dans les situations dans lesquelles la récursivité est utilisée, car la quantité d'espace de pile utilisé pour stocker les adresses de l'appelant dans les cas où les appels récursifs nid pourraient très profondément s'épuiser et arrêter l'exécution du programme.Bien que l'utilisation des appels de queue puisse aider à augmenter la vitesse, l'utilisation de la mémoire et l'efficacité dans un programme, cela peut également conduire à des situations dans lesquelles le code source est restructuré pour utiliser les appels d'une manière qui rend difficile le débogage et le suivi, en particulier avec les cas de cas de casRecursion.

L'existence d'un appel de queue est due en grande partie à la façon dont la pile d'appels fonctionne dans la plupart des programmes informatiques et des architectures système.La pile, qui est comme une pile de plaques, est une structure de données de première et dernière sortie.Lorsqu'une fonction, sous-programme ou procédure est appelée, l'adresse à partir de laquelle l'appel est fait, appelé trame de pile, est stocké dans la pile.Cela signifie un programme qui appelle la fonction A, qui appelle ensuite la fonction B, aura deux cadres de pile, une pour la fonction B et une autre en dessous pour la fonction A. Une fois la fonction B.La pile et l'exécution reviennent à la fonction A, qui a son cadre qui a éclaté de la pile lors de sa fin, renvoyant enfin le contrôle du programme au point à partir de laquelle la première fonction a été appelée à l'origine.

Lorsqu'un appel de queue est utilisé, l'instruction de retour enUne fonction utilise directement la valeur de retour d'une autre fonction comme les données à envoyer au code d'appel.Dans l'exemple ci-dessus, si la fonction a appelle la fonction B directement avec l'instruction RETOUR, alors un appel de queue a été formé.Dans la pile d'appels, au lieu d'avoir une trame de pile pour les deux fonctions A et B, la fonction B recevra l'adresse de retour de la fonction A et la trame de pile de la fonction A sera éclatée et éliminée, ce qui signifie que la fonction B remettra sa valeur de retour directement en arrièreà l'emplacement qui a appelé la fonction a sans avoir d'abord à transmettre le contrôle à la fonction A. Cela augmente la vitesse des appels de fonction ainsi que pour aider à maintenir la quantité d'informations dans la pile.

Les propriétés d'un appel de queue peuvent faireeux une option très attrayante pour les fonctions récursives.Une fonction récursive est celle qui s'appelle à plusieurs reprises pour calculer une valeur, comme cela peut être le cas lors de la traversée d'une structure de données de liste.Aucune trame de pile supplémentaire n'est créée pour les appels de fonction imbriqués, de sorte que des niveaux de récursivité très profonds peuvent être effectués en toute sécurité sans la menace immédiate d'un débordement de pile et un éventuel terminaison du programme.