Rumah >pembangunan bahagian belakang >C++ >Adakah Penyusun C/C Moden Menggunakan Arahan Push/Pop untuk Pengurusan Pembolehubah Tempatan yang Cekap?
Apakah Penyusun C/C Boleh Menggunakan Arahan Tekan/Pop untuk Mencipta Pembolehubah Setempat?
Pengenalan
Bertentangan dengan amalan biasa meningkatkan ESP secara berperingkat, soalan ini menyelidiki kemungkinan menggunakan arahan tolak dan pop untuk mewujudkan pembolehubah tempatan, bertujuan untuk mengoptimumkan kekompakan kod dan kemungkinan prestasi.
Pertimbangan Pengkompil
Pengoptimuman Pengkompil:
Pengoptimuman Enjin Tindanan:
Sampel Kod
Pertimbangkan perkara berikut contoh:
int extfunc(int *, int *); void foo() { int a=1, b=2; extfunc(&a, &b); }
Output Pengkompil
GCC, ICC, MSVC dan clang semuanya menjana kod yang bermula dengan arahan tolak, diikuti dengan manipulasi tindanan dan panggilan kepada extfunc. Ini sejajar dengan pemerhatian bahawa penyusun moden menggunakan dorongan untuk pengoptimuman.
Penyelesaian Optimum
Penyelesaian yang dioptimumkan selanjutnya ialah:
push 2 # only 2 bytes lea rdi, [rsp + 4] mov dword ptr [rdi], 1 mov rsi, rsp # special case for lea rsi, [rsp + 0] call extfunc(int*, int*) pop rax # alternative to add rsp,8 ret
Dalam kes ini, arahan tolak tunggal memperuntukkan ruang untuk kedua-dua pembolehubah tempatan sambil meninggalkan timbunan 16-bait sejajar. Ini mengoptimumkan saiz kod dan mengekalkan kecekapan.
Pertimbangan Tambahan
Atas ialah kandungan terperinci Adakah Penyusun C/C Moden Menggunakan Arahan Push/Pop untuk Pengurusan Pembolehubah Tempatan yang Cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!