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

Comment les conventions d'appel façonnent-elles le passage d'arguments de fonction en C/C ?

DDD
Libérer: 2024-11-12 07:34:02
original
1007 Les gens l'ont consulté

How Do Calling Conventions Shape Function Argument Passing in C/C  ?

Comprendre les conventions d'appel en C/C

Les conventions d'appel définissent la manière dont les fonctions transmettent et reçoivent les arguments et leurs valeurs. C/C propose diverses conventions d'appel, chacune servant un objectif spécifique.

Nombre de conventions d'appel

Il existe plusieurs conventions d'appel disponibles dans C/C, dont :

  • cdecl
  • syscall
  • pascal
  • stdcall
  • fastcall
  • vectorcall
  • safecall
  • Appel Microsoft X64 Convention

Signification de chaque convention

cdecl :

  • Arguments transmis sur la pile.
  • Les registres sont désignés à des fins spécifiques (EAX pour la valeur de retour, EAX, ECX, EDX pour enregistré par l'appelant).

syscall :

  • Similaire à cdecl mais ne préserve pas les registres spécifiques.

pascal :

  • Paramètres transmis la pile dans l'ordre de gauche à droite.
  • Callee responsable du nettoyage de la pile.

stdcall :

  • Callee nettoie dans la pile.
  • Paramètres poussés de droite à gauche, comme cdecl.
  • Registres désignés pour l'usage des fonctions internes (EAX, ECX, EDX).

appel rapide :

  • Les deux premiers arguments passés dans les registres (ECX et EDX).
  • Arguments restants poussés sur la pile de droite à gauche.

appel vectoriel :

  • Prend en charge la transmission d'arguments vectoriels à l'aide de registres SIMD.
  • Jusqu'à six registres alloué aux arguments vectoriels.

safecall (Delphi/Free Pascal):

  • Encapsule la gestion des erreurs COM.
  • Exceptions renvoyées dans EAX sous forme de HRESULT, tandis que le résultat est passé par référence.

Convention d'appel Microsoft X64 :

  • Utilisée dans Windows et UEFI de pré-démarrage.
  • Quatre premiers arguments entiers/pointeur transmis dans les registres (RCX, RDX, R8, R9).

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal