L'optimisation de queue consiste à simplement mettre à jour les arguments de des argument dans la pile et à faire un jump sur la première instruction de la fonction au lieux de les empiler une nouvelle fois et de faire un call.
Là, il n'y a pas une fonction, mais trois. C'est pas possible de faire tourner ça sur place (il n'y a qu'un seul sommet de pile). Sauf si gcc remarque que ce code est compilable sans récursion, ce qu'il fait (gcc 4.7 avec -O2, les fonctions a, b et c sont là pour l’empêcher « d'optimiser » le programme en "while(1);"
head:subq8ドル,%rspxorl%eax,%eaxcallcaddq8ドル,%rspjmplove#au lieu de faire un appel récursif. blood:subq8ドル,%rspxorl%eax,%eaxcallbaddq8ドル,%rspjmpheadlove:subq8ドル,%rspxorl%eax,%eaxcallaaddq8ドル,%rspjmpblood
[^] # Re: "Tail call optimization"
Posté par Zylabon . En réponse au journal Chantonnons en récursion. Évalué à 2.
L'optimisation de queue consiste à simplement mettre à jour les arguments de des argument dans la pile et à faire un jump sur la première instruction de la fonction au lieux de les empiler une nouvelle fois et de faire un call.
Là, il n'y a pas une fonction, mais trois. C'est pas possible de faire tourner ça sur place (il n'y a qu'un seul sommet de pile). Sauf si gcc remarque que ce code est compilable sans récursion, ce qu'il fait (gcc 4.7 avec -O2, les fonctions a, b et c sont là pour l’empêcher « d'optimiser » le programme en "while(1);"
Please do not feed the trolls