Maison > développement back-end > C++ > le corps du texte

Quel est l'impact des différentes conventions d'appel sur les appels de fonction en C/C ?

Mary-Kate Olsen
Libérer: 2024-11-24 13:25:17
original
422 Les gens l'ont consulté

How Do Different Calling Conventions Impact Function Calls in C/C  ?

Comprendre la variété des conventions d'appel dans C/C

C/C fournit une gamme de conventions d'appel, chacune avec des caractéristiques et des implications distinctes pour les appels de fonction. Ces conventions déterminent comment les arguments sont transmis aux fonctions et comment les valeurs de retour sont gérées.

Conventions d'appel disponibles

Les principales conventions d'appel disponibles en C/C sont :

  • cdecl : Les arguments sont poussés sur la pile de droite à gauche, avec Registres enregistrés par l'appelé (EAX, ECX, EDX) et registres enregistrés par l'appelant (pointeur de pile et le reste).
  • syscall : Similaire à cdecl, mais avec EAX, ECX et EDX non conservé. La taille de la liste de paramètres est transmise dans AL.
  • pascal : Les arguments sont poussés sur la pile de gauche à droite et l'appelé est responsable de l'équilibrage de la pile.
  • stdcall : Une variante de pascal où l'appelé est responsable du nettoyage de la pile mais les paramètres sont poussés sur la pile de droite à gauche. EAX, ECX et EDX sont désignés pour être utilisés dans la fonction.
  • fastcall : Passe les deux premiers arguments dans les registres ECX et EDX, et les arguments restants dans la pile de droite à gauche. .

Conventions d'appel étendues

En plus de celles-ci conventions standard, il existe des variantes spécialisées :

  • vectorcall : Transmettez les arguments vectoriels à l'aide des registres SIMD, étendant ainsi la prise en charge de la transmission de valeurs d'agrégat vectoriel homogènes.
  • safecall : Encapsule la gestion des erreurs COM, avec des exceptions renvoyées sous forme de HResult dans EAX et des résultats transmis par référence sur le pile.
  • Convention d'appel Microsoft X64 : Utilise des registres spécifiques pour les arguments entiers et à virgule flottante, avec des arguments supplémentaires poussés sur la pile. L'appelant est responsable de l'allocation de « l'espace fantôme » sur la pile.

Choisir la bonne convention

La convention d'appel appropriée dépend de la plate-forme spécifique, du compilateur et les exigences de candidature. Tenez compte de facteurs tels que le nombre de paramètres, l'utilisation des registres et l'optimisation des performances lors de la sélection d'une convention d'appel.

Par exemple, stdcall est couramment utilisé pour appeler des fonctions de l'API Windows, tandis que cdecl est souvent utilisé dans des environnements de type Unix. fastcall peut offrir des performances plus rapides pour les fonctions avec peu de paramètres.

Ressources supplémentaires

  • [Microsoft Docs : Conventions d'appel](https://docs.microsoft. com/en-us/cpp/build/x64-calling-convention)
  • [Wikipédia : Appel Conventions](https://en.wikipedia.org/wiki/Calling_convention)

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