Menguatkuasakan Perintah Penyata dalam C
Soalan:
Bagaimanakah seseorang boleh menghalang penyusunan semula pernyataan dalam kod C, walaupun dengan pengoptimuman didayakan?
Jawapan:
Walaupun andaian biasa, C tidak semestinya menguatkuasakan susunan penyata, terutamanya di bawah pengoptimuman. Penyataan tertentu mungkin kelihatan tidak teratur dalam kod yang dioptimumkan, yang boleh menjadi masalah untuk senario seperti operasi sensitif masa.
Penyelesaian:
Pada asasnya, memanipulasi operasi semantik operasi asas seperti penambahan untuk mencapai susunan yang ketat tidak boleh dilaksanakan. Pengoptimuman reka bentuk pengkompil dan perkakasan adalah berdasarkan andaian bahawa operasi ini tidak mempunyai sifat pemasaan yang boleh diperhatikan.
Walau bagaimanapun, teknik yang berkesan telah muncul untuk penanda aras mikro:
Manipulasi Data Legap :
Sokongan Perpustakaan:
template <class T> __attribute__((always_inline)) inline void DoNotOptimize(const T &value) { asm volatile("" : "+m"(const_cast<T &&>(value))); }
Arahan Pengkompil:
Nota:
The Jawatankuasa piawaian C sedang meneroka penyeragaman API seperti DoNotOptimize untuk memudahkan lagi penguatkuasaan kenyataan pesanan.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mencegah Susunan Semula Penyata dalam Kod C Dioptimumkan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!