Pertanyaan Apakah ada alasan mengapa tidak menggunakan pengoptimalan waktu tautan?


GCC, MSVC, LLVM dan mungkin toolchain lain memiliki dukungan untuk pengoptimalan waktu tautan (seluruh program) untuk memungkinkan optimalisasi panggilan di antara unit-unit kompilasi.

Apakah ada alasan untuk tidak mengaktifkan opsi ini ketika mengkompilasi perangkat lunak produksi?


32
2018-05-19 11:24


asal


Jawaban:


Saya berasumsi bahwa oleh "perangkat lunak produksi" maksud Anda perangkat lunak yang Anda kirim ke pelanggan / masuk ke produksi. Jawabannya di Mengapa tidak selalu menggunakan pengoptimalan kompilator? (ramah ditunjukkan oleh Mankarse) kebanyakan berlaku untuk situasi di mana Anda ingin mendebug kode Anda (jadi perangkat lunak masih dalam tahap pengembangan - tidak dalam produksi).

Satu-satunya alasan yang baik dan valid yang dapat saya pikirkan adalah bahwa pengoptimalan waktu tautan mungkin memperkenalkan bug halus, lihat Optimalisasi tautan waktu untuk kernel. Dengan asumsi Anda memiliki tes yang tepat untuk memeriksa kebenaran perangkat lunak yang akan Anda kirimkan, saya tidak melihat alasan mengapa tidak menggunakan LTO secara default. (LTO semakin matang seiring waktu, jadi mari kita berharap bug yang halus itu akan semakin jarang.)


21
2018-05-19 12:08



Pertanyaan terakhir ini memunculkan kasus lain yang mungkin (tetapi lebih spesifik) di mana KPP mungkin memiliki efek yang tidak diinginkan: jika kode yang dipermasalahkan diinstruksikan untuk pengaturan waktu, dan unit kompilasi terpisah telah digunakan untuk mencoba mempertahankan urutan relatif dari pernyataan instrument dan instrumen, maka KPP memiliki peluang bagus untuk menghancurkan pemesanan yang diperlukan.

Saya memang mengatakan itu spesifik.


4
2018-06-14 09:53