Maison > développement back-end > C++ > Pourquoi RAX est-il poussé sur la pile avant un appel final avec une « std::function » ?

Pourquoi RAX est-il poussé sur la pile avant un appel final avec une « std::function » ?

Susan Sarandon
Libérer: 2024-12-13 01:11:16
original
174 Les gens l'ont consulté

Why is RAX Pushed onto the Stack Before a Tail Call with a `std::function`?

Pourquoi RAX est-il poussé vers la pile avant l'appel final ?

La sortie de l'assembly pour la fonction f prenant un argument std::function révèle une opération intrigante : juste avant l'appel final, RAX est poussé vers la pile. Ce comportement n'est pas observé dans un simple appel de queue sans le wrapper std::function.

Considérations sur l'alignement

La raison de pousser RAX est enracinée dans le 64 bits ABI, qui nécessite que la pile soit alignée sur 16 octets avant une instruction d'appel. L'instruction d'appel pousse une adresse de retour de 8 octets sur la pile, violant ainsi l'alignement. Pour remédier à cela, le compilateur doit réaligner la pile sur un multiple de 16 octets avant l'appel final.

Alignement efficace de la pile

Pousser une valeur indifférente comme RAX est un moyen efficace d'obtenir l'alignement de la pile car :

  • Les moteurs de pile sur certains processeurs peuvent optimiser le fonctionnement par rapport à sub rsp, 8.
  • La valeur poussée vers la pile n'est pas pertinente car elle n'est pas utilisée dans la fonction.

En poussant RAX, le compilateur satisfait à l'exigence d'alignement sans perturber le comportement de la fonction.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal