Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah konvensyen panggilan yang berbeza memberi kesan kepada hantaran fungsi hujah dan pembersihan tindanan dalam C/C?

Bagaimanakah konvensyen panggilan yang berbeza memberi kesan kepada hantaran fungsi hujah dan pembersihan tindanan dalam C/C?

Barbara Streisand
Barbara Streisandasal
2024-11-24 07:31:10773semak imbas

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

Memanggil Konvensyen dalam C/C

Dalam C/C , konvensyen panggilan yang berbeza digunakan untuk menentukan cara hujah dihantar kepada fungsi dan cara keputusan dikembalikan. Konvensyen ini menentukan susunan dan kaedah penempatan hujah pada tindanan atau dalam daftar, serta tanggungjawab untuk pembersihan tindanan.

Konvensyen Panggilan yang Tersedia

C/C menawarkan berbilang konvensyen panggilan, termasuk:

  • cdecl: Argumen ditolak pada tindanan dari kanan ke kiri, dengan daftar khusus ditetapkan untuk data yang disimpan pemanggil dan disimpan oleh penerima.
  • syscall: Serupa dengan cdecl tetapi tidak mengekalkan daftar tertentu dan memerlukan lulus saiz senarai parameter secara eksplisit.
  • pascal: Parameter ditolak pada tindanan dari kiri ke kanan, dan penerima bertanggungjawab untuk mengimbangi tindanan.
  • stdcall : Variasi pascal di mana pemanggil mengendalikan pembersihan tindanan, dengan hujah ditolak dari kanan ke kiri seperti dalam cdecl.
  • fastcall: Dua argumen pertama dihantar dalam daftar tertentu dan baki argumen ditolak pada tindanan.
  • vectorcall: Direka bentuk untuk menghantar argumen vektor yang cekap menggunakan SIMD mendaftar.
  • safecall: Digunakan dalam konteks COM (Model Objek Komponen) untuk mengendalikan pengecualian secara telus.
  • Konvensyen Panggilan Microsoft X64: Konvensyen piawai digunakan pada Windows dan pra-but UEFI untuk seni bina x86-64, menggunakan daftar khusus untuk hujah dan nilai titik terapung dan menggunakan "ruang bayang" untuk pengendalian tindanan.

Penerangan Terperinci

Untuk gambaran keseluruhan menyeluruh tentang konvensyen panggilan ini, rujuk perkara berikut sumber:

  • Wikipedia: [C memanggil konvensyen](https://en.wikipedia.org/wiki/X86_calling_conventions)
  • MSDN: [Memanggil Konvensyen untuk Penyusun C](https://docs.microsoft.com/en-us/cpp/build /x64-calling-convention)
  • Intel: [Volume Manual Pembangun Perisian Intel® 64 dan IA-32 Architectures 1: Seni Bina Asas](https://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-manual-325383.pdf)

Atas ialah kandungan terperinci Bagaimanakah konvensyen panggilan yang berbeza memberi kesan kepada hantaran fungsi hujah dan pembersihan tindanan 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