Heim > Backend-Entwicklung > C++ > Hauptteil

Wie wirken sich unterschiedliche Aufrufkonventionen auf die Ausführung von C/C-Funktionen aus?

Barbara Streisand
Freigeben: 2024-11-20 03:10:02
Original
246 Leute haben es durchsucht

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

Unterschiedliche Aufrufkonventionen in C/C

C/C bietet verschiedene Aufrufkonventionen, um anzugeben, wie Funktionsargumente und Rückgabewerte behandelt werden. Das Verständnis dieser Konventionen ist entscheidend für die Optimierung von Code und die Gewährleistung einer effizienten Interaktion zwischen verschiedenen Teilen eines Programms.

Verfügbare Aufrufkonventionen

In C/C sind mehrere Aufrufkonventionen verfügbar:

  • cdecl: Auf dem Stapel übergebene Argumente, Rückgabewert in Registern (EAX für Ganzzahlen, ST0 für Floats)
  • syscall: Ähnlich wie cdecl, außer dass EAX-, ECX- und EDX-Register nicht erhalten bleiben
  • Pascal: Parameter nach links verschoben- nach rechts, Aufgerufener balanciert Stapel
  • stdcall: Aufrufer-Bereinigung stdcall, Parameter von rechts nach links verschoben, Rückgabewert in EAX
  • Fastcall: Die ersten beiden Argumente werden in ECX und EDX übergeben, verbleibende Argumente auf dem Stapel
  • vectorcall: Zur Übergabe von Vektorargumenten mithilfe von SIMD Register
  • safecall: Fehlerbehandlung gekapselt, HR-Ergebnisse in EAX zurückgegeben
  • Microsoft X64 Calling Convention: Wird unter Windows und UEFI verwendet, 64-Bit-Rückgabe Wert in RAX, übergebene 64-Bit-Argumente RCX-R9
  • thiscall: Ähnlich wie cdecl, aber dieser Zeiger wird über verstecktes Argument übergeben

Detaillierte Erklärung

cdecl:
In cdecl (call by Wert) übernimmt die aufgerufene Funktion die Verantwortung für die Bereinigung des Stapels vor der Rückkehr. Argumente werden von rechts nach links auf den Stapel geschoben.

Pascal:
In Pascal (Aufruf nach Wertergebnis) ist der Aufgerufene dafür verantwortlich, den Stapel vor der Rückgabe auszugleichen. Der Rückgabewert wird auch auf dem Stapel zurückgegeben.

stdcall:
Beim stdcall (Call by Value) ist der Aufgerufene für das Aufräumen des Stapels verantwortlich. Argumente werden von rechts nach links auf den Stapel geschoben, während Rückgabewerte im EAX-Register gespeichert werden.

Fastcall:
Bei Fastcall (Aufruf per Register) die ersten beiden Argumente werden in ECX- und EDX-Registern übergeben. Die restlichen Argumente werden von rechts nach links auf den Stapel gelegt.

**Weitere Einzelheiten zu den anderen Aufrufkonventionen finden Sie in der folgenden umfassenden Antwort:]

Das obige ist der detaillierte Inhalt vonWie wirken sich unterschiedliche Aufrufkonventionen auf die Ausführung von C/C-Funktionen aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage