Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah Konvensyen Memanggil Membentuk Fungsi Hujah Melepasi dalam C/C ?

Bagaimanakah Konvensyen Memanggil Membentuk Fungsi Hujah Melepasi dalam C/C ?

DDD
DDDasal
2024-11-12 07:34:021009semak imbas

How Do Calling Conventions Shape Function Argument Passing in C/C  ?

Memahami Konvensyen Panggilan dalam C/C

Konvensyen panggilan mentakrifkan cara fungsi lulus dan menerima hujah serta nilainya. C/C menawarkan pelbagai konvensyen panggilan, masing-masing mempunyai tujuan tertentu.

Bilangan Konvensyen Panggilan

Terdapat beberapa konvensyen panggilan tersedia dalam C/C , termasuk:

  • cdecl
  • syscall
  • pascal
  • stdcall
  • fastcall
  • vectorcall
  • Konvensyen Panggilan Microsoft X64

Maksud Setiap Konvensyen

cdecl:

    Argumen dihantar pada tindanan.
  • Pendaftar ditetapkan untuk tujuan tertentu (EAX untuk nilai pulangan, EAX, ECX, EDX untuk disimpan pemanggil).

syscall:

    Serupa dengan cdecl tetapi tidak mengekalkan daftar tertentu.

pascal:

    Parameter dihantar pada tindanan dalam susunan kiri ke kanan.
  • Pemanggil yang bertanggungjawab untuk pembersihan tindanan.

stdcall:

    Callee membersihkan timbunan.
  • Parameter ditolak dalam tertib kanan ke kiri, seperti cdecl.
  • Daftar yang ditetapkan untuk kegunaan fungsi dalaman (EAX, ECX, EDX).

panggilan pantas:

    Dua argumen pertama diluluskan dalam daftar (ECX dan EDX).
  • Baki argumen ditolak pada timbunan kanan-ke- kiri.

panggilan vektor:

    Menyokong menghantar argumen vektor menggunakan daftar SIMD.
  • Sehingga enam daftar diperuntukkan untuk argumen vektor .

safecall (Delphi/Free Pascal):

    Merangkumi pengendalian ralat COM.
  • Pengecualian dikembalikan dalam EAX sebagai HRESULT, sementara hasilnya diluluskan melalui rujukan.

Konvensyen Panggilan Microsoft X64:

    Digunakan dalam Windows dan pra-but UEFI.
  • Empat argumen integer/penunjuk pertama diluluskan dalam daftar (RCX, RDX, R8, R9).

Atas ialah kandungan terperinci Bagaimanakah Konvensyen Memanggil Membentuk Fungsi Hujah Melepasi dalam C/C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn