Heim >Backend-Entwicklung >C++ >Wie wirken sich unterschiedliche Aufrufkonventionen auf die Übergabe von Funktionsargumenten und die Stapelbereinigung in C/C aus?

Wie wirken sich unterschiedliche Aufrufkonventionen auf die Übergabe von Funktionsargumenten und die Stapelbereinigung in C/C aus?

Barbara Streisand
Barbara StreisandOriginal
2024-11-24 07:31:10774Durchsuche

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

Aufrufkonventionen in C/C

In C/C werden unterschiedliche Aufrufkonventionen verwendet, um zu bestimmen, wie Argumente an Funktionen übergeben werden und wie Ergebnisse werden zurückgegeben. Diese Konventionen bestimmen die Reihenfolge und Methode der Argumentplatzierung auf dem Stapel oder in Registern sowie die Verantwortung für die Stapelbereinigung.

Verfügbare Aufrufkonventionen

C/C bietet mehrere Aufrufkonventionen, darunter:

  • cdecl: Argumente werden gepusht auf dem Stapel von rechts nach links, mit bestimmten Registern, die für vom Anrufer und vom Angerufenen gespeicherte Daten bestimmt sind.
  • syscall: Ähnlich wie cdecl, behält jedoch bestimmte Register nicht bei und erfordert die Übergabe von Größe der Parameterliste explizit.
  • Pascal: Parameter werden von links nach rechts auf den Stapel verschoben und die Der Aufgerufene ist für den Stapelausgleich verantwortlich.
  • stdcall: Eine Variation von Pascal, bei der der Aufgerufene die Stapelbereinigung übernimmt, wobei die Argumente wie in cdecl von rechts nach links verschoben werden.
  • Fastcall: Die ersten beiden Argumente werden in bestimmten Registern übergeben und die restlichen Argumente werden auf das übertragen Stack.
  • vectorcall: Entwickelt für die effiziente Übergabe von Vektorargumenten mithilfe von SIMD-Registern.
  • safecall: Wird in COM-Kontexten (Component Object Model) verwendet um Ausnahmen transparent zu behandeln.
  • Microsoft X64 Calling Convention: Eine standardisierte Konvention, die unter Windows und Pre-Boot-UEFI für x86-64-Architekturen verwendet wird, wobei bestimmte Register für Argumente und Gleitkommawerte verwendet werden und ein „Schattenraum“ für die Stapelverarbeitung verwendet wird.

Detaillierte Beschreibungen

Eine umfassende Übersicht über diese Anrufkonventionen finden Sie im Folgenden Ressourcen:

  • Wikipedia: [C-Aufrufkonventionen](https://en.wikipedia.org/wiki/X86_calling_conventions)
  • MSDN: [Aufrufkonventionen für C Compiler](https://docs.microsoft.com/en-us/cpp/build/x64-calling-convention)
  • Intel: [Intel® 64 and IA-32 Architectures Software Developer's Manual Volume 1: Basic Architektur](https://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-manual-325383.pdf)

Das obige ist der detaillierte Inhalt vonWie wirken sich unterschiedliche Aufrufkonventionen auf die Übergabe von Funktionsargumenten und die Stapelbereinigung in C/C aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn