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

Quel est l'impact des différentes conventions d'appel sur l'exécution des fonctions C/C ?

Barbara Streisand
Libérer: 2024-11-20 03:10:02
original
258 Les gens l'ont consulté

How Do Different Calling Conventions Impact C/C   Function Execution?

Différentes conventions d'appel en C/C

C/C propose diverses conventions d'appel pour spécifier la manière dont les arguments de fonction et les valeurs de retour sont gérés. Comprendre ces conventions est crucial pour optimiser le code et garantir une interaction efficace entre les différentes parties d'un programme.

Conventions d'appel disponibles

Il existe plusieurs conventions d'appel disponibles en C/C :

  • cdecl : Arguments passés sur la pile, renvoie la valeur dans les registres (EAX pour les entiers, ST0 pour floats)
  • syscall : similaire à cdecl, sauf que les registres EAX, ECX et EDX ne sont pas conservés
  • pascal : paramètres poussés de gauche à -à droite, la pile des soldes de l'appelé
  • stdcall : Appel standard de nettoyage de l'appelant, paramètres poussés de droite à gauche, valeur de retour dans EAX
  • fastcall : deux premiers arguments passés dans ECX et EDX, arguments restants sur la pile
  • vectorcall : pour transmettre des arguments vectoriels à l'aide de SIMD registres
  • safecall : gestion des erreurs encapsulées, HResults renvoyés dans EAX
  • Convention d'appel Microsoft X64 : utilisée sous Windows et UEFI, retour 64 bits valeur dans RAX, arguments 64 bits transmis RCX-R9
  • thiscall : similaire à cdecl, mais ce pointeur passé via un argument caché

Explication détaillée

cdecl :
En cdecl (appel par valeur), la fonction appelée assume la responsabilité du nettoyage de la pile avant de revenir. Les arguments sont poussés sur la pile de droite à gauche.

pascal:
En pascal (appel par valeur-résultat), l'appelé est responsable de l'équilibre de la pile avant le retour. La valeur de retour est également renvoyée sur la pile.

stdcall:
Dans stdcall (appel par valeur), l'appelé est responsable du nettoyage de la pile. Les arguments sont poussés sur la pile de droite à gauche, tandis que les valeurs de retour sont stockées dans le registre EAX.

fastcall :
Dans fastcall (appel par registre), les deux premiers arguments sont transmis dans les registres ECX et EDX. Le reste des arguments est poussé sur la pile de droite à gauche.

**Pour plus de détails sur les autres conventions d'appel, veuillez vous référer à la réponse complète suivante :]

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