Heim >Backend-Entwicklung >C++ >Wie wirken sich unterschiedliche Aufrufkonventionen in C/C auf die Funktionsausführung aus?

Wie wirken sich unterschiedliche Aufrufkonventionen in C/C auf die Funktionsausführung aus?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-12 05:31:02804Durchsuche

How do Different Calling Conventions in C/C   Impact Function Execution?

Aufrufkonventionen in C/C verstehen

In C/C definieren verschiedene Aufrufkonventionen die Protokolle für die Übergabe von Argumenten, die Rückgabe von Werten usw Bereinigen des Stapels, wenn Funktionen aufgerufen werden. Zu diesen Konventionen gehören stdcall, extern, pascal und mehrere andere.

Verfügbare Aufrufkonventionen

In C/C sind zahlreiche Aufrufkonventionen verfügbar:

  • cdecl: Argumente werden von rechts nach links auf den Stapel verschoben, Stapelausgleich Wird vom Aufrufer verarbeitet.
  • syscall: Ähnlich wie cdecl, aber EAX-, ECX- und EDX-Register werden nicht beibehalten.
  • pascal: Argumente von links nach rechts auf den Stapel geschoben, der Anrufer ist für den Stapel verantwortlich Aufräumen.
  • stdcall: Der Aufrufer verschiebt Argumente von rechts nach links, der Aufgerufene bereinigt den Stapel, EAX, ECX und EDX, die innerhalb der Funktion für bestimmte Zwecke verwendet werden.
  • Fastcall: Die ersten beiden Argumente werden über ECX- und EDX-Register übergeben, die restlichen Argumente werden von auf den Stapel verschoben von rechts nach links.
  • vectorcall: Verwendet SIMD-Register, um Vektorargumente zu übergeben, verarbeitet Vektortypen und HVA-Werte.
  • safecall: Kapselt COM-Fehlerbehandlung, übergibt Ausnahmen in EAX und das Ergebnis als Referenz Stapel.
  • Microsoft Auswirkungen verschiedener Konventionen

Jede Berufungskonvention hat ihre Vor- und Nachteile Nachteile. Beispielsweise vereinfacht stdcall die Verantwortlichkeiten des Aufrufers, während fastcall die Leistung durch die Reduzierung von Stack-Operationen verbessert. Die Wahl der Aufrufkonvention kann von Faktoren wie Betriebssystem, Prozessorarchitektur und Codierungsstilpräferenzen abhängen.

Zusätzliche Ressourcen

[Wikipedia: C Aufrufkonventionen](https://en.wikipedia.org/wiki/Calling_convention#C)

[Rufen Sie Ihre Funktionen auf! (x86-Aufrufkonventionen)](https://www.agner.org/optimize/calling_conventions.pdf)
  • [MSDN: Aufrufkonventionen für Arm64 (AArch64)](https://docs.microsoft.com/en-us/cpp/build/arm64-abi-for-visual-studio?view=vs-2022)

Das obige ist der detaillierte Inhalt vonWie wirken sich unterschiedliche Aufrufkonventionen in C/C auf die Funktionsausführung 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