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!