Maison >développement back-end >C++ >Quel est l'impact des différentes conventions d'appel sur le passage des arguments de fonction et le nettoyage de la pile en C/C ?

Quel est l'impact des différentes conventions d'appel sur le passage des arguments de fonction et le nettoyage de la pile en C/C ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-24 07:31:10775parcourir

How do different calling conventions impact function argument passing and stack cleanup in C/C  ?

Conventions d'appel en C/C

En C/C, différentes conventions d'appel sont utilisées pour déterminer comment les arguments sont transmis aux fonctions et comment les résultats sont renvoyés. Ces conventions dictent l'ordre et la méthode de placement des arguments sur la pile ou dans les registres, ainsi que la responsabilité du nettoyage de la pile.

Conventions d'appel disponibles

C/C propose plusieurs conventions d'appel, notamment :

  • cdecl : Les arguments sont poussés sur la pile de droite à gauche, avec des registres spécifiques désignés pour les données enregistrées par l'appelant et l'appelé.
  • syscall : Similaire à cdecl mais ne préserve pas certains registres et nécessite de transmettre la taille du liste de paramètres explicitement.
  • pascal : Les paramètres 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é gère le nettoyage de la pile, avec des arguments poussés de droite à gauche comme dans cdecl.
  • fastcall : Les deux premiers arguments sont passés dans des registres spécifiques, et les arguments restants sont poussés sur le stack.
  • vectorcall : Conçu pour passer efficacement des arguments vectoriels à l'aide de registres SIMD.
  • safecall : Utilisé dans les contextes COM (Component Object Model) pour gérer les exceptions de manière transparente.
  • Convention d'appel Microsoft X64 : Une convention standardisée utilisé sur Windows et UEFI de pré-démarrage pour les architectures x86-64, utilisant des registres spécifiques pour les arguments et les valeurs à virgule flottante et employant un « espace fantôme » pour la gestion de la pile.

Descriptions détaillées

Pour un aperçu complet de ces conventions d'appel, reportez-vous à ce qui suit ressources :

  • Wikipedia : [Conventions d'appel C](https://en.wikipedia.org/wiki/X86_calling_conventions)
  • MSDN : [Conventions d'appel pour C Compilateurs](https://docs.microsoft.com/en-us/cpp/build/x64-calling-convention)
  • Intel : [Manuel du développeur de logiciels pour les architectures Intel® 64 et IA-32, volume 1 : Basique Architecture](https://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-manual-325383.pdf)

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!

Déclaration:
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