Penyusun C/C tradisional mencipta pembolehubah tempatan dengan meningkatkan penuding tindanan (ESP) sekali. Walau bagaimanapun, menggunakan arahan push/pop boleh menghasilkan kod yang lebih padat dan berkemungkinan lebih pantas. Artikel ini meneroka penyusun mana yang menawarkan pengoptimuman ini.
Penyelidikan menunjukkan bahawa semua empat penyusun x86 utama (GCC, Clang, ICC dan MSVC) tidak menggunakan push/ arahan pop untuk mencipta pembolehubah tempatan. Sebaliknya, mereka lebih suka variasi kaedah lama, menggunakan sub rsp, c untuk mengurangkan penuding tindanan.
Menggunakan tekan/pop untuk pembolehubah setempat menawarkan beberapa kelebihan:
Walaupun push/pop boleh memberi manfaat, ia tidak disyorkan dalam semua kes. Sebagai contoh, ia boleh menyebabkan uops penyegerakan tindanan tambahan apabila dicampur dengan mod pengalamatan [rsp x].
Pertimbangkan fungsi berikut:
1 2 3 4 5 6 |
|
Kompilasi yang lebih baik menggunakan push/pop:
1 2 3 4 5 6 7 8 9 |
|
Nota: Contoh ini mengoptimumkan kekompakan dan kelajuan dengan bertindih 4 bait terakhir arahan tolak dengan 4 bait pertama arahan lea .
Walaupun arahan tolak/pop boleh menawarkan saiz kod dan kelebihan prestasi untuk mencipta pembolehubah tempatan, ia tidak digunakan pada masa ini oleh penyusun C/C arus perdana. Ini mungkin disebabkan oleh potensi untuk uops penyegerakan tindanan tambahan dan kerumitan dalam menguruskan pengimbangan tindanan. Walau bagaimanapun, apabila pengoptimuman perkakasan dan pengkompil berkembang, ada kemungkinan push/pop untuk pembolehubah tempatan boleh digunakan secara meluas pada masa hadapan.
Atas ialah kandungan terperinci Adakah Pengkompil C/C Menggunakan Arahan Tekan/Pop untuk Penciptaan Pembolehubah Setempat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!