Memahami Konvensyen Panggilan dalam C/C
Dalam C/C , pelbagai konvensyen panggilan mentakrifkan protokol untuk menghantar hujah, mengembalikan nilai dan membersihkan timbunan apabila fungsi dipanggil. Konvensyen ini termasuk stdcall, extern, pascal dan beberapa yang lain.
Konvensyen Panggilan yang Tersedia
Terdapat banyak konvensyen panggilan tersedia dalam C/C :
-
cdecl: Hujah ditolak ke timbunan kanan-ke-kiri, pengimbangan tindanan dikendalikan oleh pemanggil.
-
syscall: Serupa dengan cdecl, tetapi daftar EAX, ECX dan EDX tidak disimpan.
-
pascal: Hujah ditolak ke timbunan dari kiri ke kanan, pemanggil bertanggungjawab untuk timbunan pembersihan.
-
stdcall: Pemanggil menolak hujah dari kanan ke kiri, pemanggil membersihkan tindanan, EAX, ECX dan EDX yang digunakan dalam fungsi untuk tujuan tertentu.
-
panggilan pantas: Dua hujah pertama diluluskan melalui daftar ECX dan EDX, baki hujah ditolak ke tindanan dari kanan ke kiri.
-
vectorcall: Menggunakan daftar SIMD untuk menghantar argumen vektor, mengendalikan jenis vektor dan nilai HVA.
-
safecall: Merangkumkan pengendalian ralat COM, lulus pengecualian dalam EAX, dan hasilnya melalui rujukan pada tindanan.
-
Konvensyen Panggilan Microsoft X64: Argumen integer diluluskan dalam daftar tertentu, argumen titik terapung diluluskan dalam daftar XMM, ruang bayangan diperuntukkan untuk tumpahan.
Implikasi Konvensyen Berbeza
Setiap konvensyen panggilan mempunyai kebaikan dan keburukan. Sebagai contoh, stdcall memudahkan tanggungjawab pemanggil, manakala fastcall meningkatkan prestasi dengan mengurangkan operasi tindanan. Pilihan konvensyen panggilan mungkin bergantung pada faktor seperti sistem pengendalian, seni bina pemproses dan pilihan gaya pengekodan.
Sumber Tambahan
- [Wikipedia: C konvensyen panggilan](https://en.wikipedia.org/wiki/Calling_convention#C)
- [Panggil Anda Fungsi! (x86 Konvensyen Panggilan)](https://www.agner.org/optimize/calling_conventions.pdf)
- [MSDN: Calling Conventions for Arm64 (AArch64)](https://docs.microsoft.com /en-us/cpp/build/arm64-abi-for-visual-studio?view=vs-2022)
Atas ialah kandungan terperinci Bagaimanakah Konvensyen Panggilan Berbeza dalam Perlaksanaan Fungsi Impak C/C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!