Pada hari-hari awal gcc (2,8 dll) dan pada masa egcs, dan redhat 2,96 -O3 kadang-kadang cukup buggy. Tapi ini lebih dari satu dekade yang lalu, dan -O3 tidak jauh berbeda dari tingkat optimisasi lainnya (dalam buggyness).
Namun, ia cenderung mengungkapkan kasus-kasus di mana orang mengandalkan perilaku yang tidak terdefinisi, karena lebih mengandalkan aturan, dan terutama kasus sudut, dari bahasa.
Sebagai catatan pribadi, saya menjalankan perangkat lunak produksi di sektor keuangan selama bertahun-tahun sekarang dengan -O3 dan belum menemukan bug yang tidak akan ada di sana jika saya akan menggunakan -O2.
Dengan permintaan populer, berikut tambahan:
-O3 dan terutama flag-flag tambahan seperti -funroll-loop (tidak diaktifkan oleh -O3) terkadang dapat menyebabkan lebih banyak kode mesin yang dihasilkan. Dalam keadaan tertentu (misalnya pada cpu dengan cache instruksi L1 sangat kecil) ini dapat menyebabkan perlambatan karena semua kode misalnya beberapa loop batin sekarang tidak pas lagi ke L1I. Umumnya gcc berusaha cukup keras untuk tidak menghasilkan kode begitu banyak, tetapi karena biasanya mengoptimalkan kasus generik, ini bisa terjadi. Opsi yang cenderung rentan terhadap hal ini (seperti loop terbuka) biasanya tidak termasuk dalam -O3 dan ditandai sesuai di halaman manual. Karena itu umumnya merupakan ide yang baik untuk menggunakan -O3 untuk menghasilkan kode cepat, dan hanya kembali ke -O2 atau -Os (yang mencoba untuk mengoptimalkan ukuran kode) saat yang tepat (misalnya ketika profiler menunjukkan L1I meleset).
Jika Anda ingin mengambil optimasi ke ekstrem, Anda dapat men-tweak dalam gcc melalui --param biaya yang terkait dengan optimasi tertentu. Selain itu perhatikan bahwa gcc sekarang memiliki kemampuan untuk menempatkan atribut pada fungsi yang mengontrol pengaturan optimisasi hanya untuk fungsi-fungsi ini, jadi ketika Anda menemukan Anda memiliki masalah dengan -O3 dalam satu fungsi (atau ingin mencoba flag khusus untuk fungsi itu), Anda tidak perlu mengkompilasi seluruh file atau bahkan seluruh proyek dengan O2.
otoh tampaknya harus diperhatikan saat menggunakan -Ofast, yang menyatakan:
-Ofast memungkinkan semua -O3 optimasi. Ini juga memungkinkan optimasi yang tidak valid untuk semua program yang sesuai standar.
yang membuat saya menyimpulkan bahwa -O3 dimaksudkan untuk sepenuhnya memenuhi standar.