stdcall vs. cdecl: Memahami Konvensyen Panggilan
Dalam C/C , fungsi boleh digunakan menggunakan pelbagai konvensyen panggilan, dua daripada yang paling biasa ialah stdcall dan cdecl. Konvensyen ini menentukan cara parameter dihantar ke fungsi dan cara tindanan diuruskan semasa panggilan fungsi.
1. Pembersihan Tindanan dalam Fungsi cdecl
Apabila fungsi cdecl dipanggil, pemanggil tidak bertanggungjawab untuk mengosongkan ruang tindanan yang dikhaskan untuk parameter fungsi. Fungsi itu sendiri bertanggungjawab untuk membersihkan ruang tindanannya, kerana penuding tindanan dilaraskan semasa kemasukan fungsi untuk menampung parameternya. Pemanggil tidak perlu mengetahui konvensyen panggilan bagi fungsi yang dipanggil kerana maklumat ini dikendalikan oleh pengkompil.
2. Memanggil Konvensyen Tidak Padan
Mencampurkan konvensyen panggilan biasanya tidak disyorkan. Jika fungsi stdcall memanggil fungsi cdecl, fungsi stdcall akan menjangkakan fungsi cdecl membersihkan timbunan, yang tidak akan dilakukan, yang membawa kepada kebocoran memori. Isu yang sama timbul apabila fungsi cdecl memanggil fungsi stdcall, kerana fungsi cdecl tidak akan mengharapkan fungsi stdcall telah membersihkan tindanan.
3. Perbandingan Prestasi
Secara amnya, tiada perbezaan prestasi yang ketara antara konvensyen panggilan stdcall dan cdecl. Walau bagaimanapun, sesetengah sistem mungkin mengoptimumkan untuk satu konvensyen berbanding yang lain. Dalam konteks pengaturcaraan Windows, stdcall ialah konvensyen panggilan standard untuk fungsi WinAPI, manakala cdecl digunakan terutamanya untuk sambungan bahasa C dan C.
Atas ialah kandungan terperinci Bilakah Pemanggil Bertanggungjawab untuk Pembersihan Tindanan: cdecl vs. stdcall?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!