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

Barbara Streisand
Lepaskan: 2024-11-24 07:31:10
asal
760 orang telah melayarinya

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan