Gcc'nin ilk günlerinde (2.8 vb.) Ve egcs zamanında ve redhat 2.96-O3 bazen oldukça buggy idi. Ancak bu on yıldan uzun bir süre önce ve -O3 diğer optimizasyon seviyelerinden çok farklı değil (buggyness'te).
Bununla birlikte, dil (ler) in kurallarına ve özellikle köşe vakalarına daha sıkı güvenmesi nedeniyle, insanların tanımlanmamış davranışa güvendiği vakaları ortaya çıkarma eğilimindedir.
Kişisel bir not olarak, yıllardır -O3 ile finansal sektörde üretim yazılımı kullanıyorum ve -O2 kullansaydım orada olmayacak bir hatayla karşılaşmadım.
Yoğun talep üzerine, burada bir ek:
-O3 ve özellikle -funroll-loop gibi ek bayraklar (-O3 tarafından etkinleştirilmez) bazen daha fazla makine kodu oluşturulmasına neden olabilir. Belirli koşullar altında (örneğin, son derece küçük L1 komut önbelleğine sahip bir CPU'da) bu, örneğin artık L1I'ye uymayan bazı iç döngülerin tüm kodlarından dolayı yavaşlamaya neden olabilir. Genellikle gcc çok fazla kod üretmemek için oldukça uğraşır, ancak genellikle genel durumu optimize ettiğinden, bu olabilir. Özellikle buna eğilimli seçenekler (loop unrolling gibi) normalde -O3'e dahil edilmez ve buna uygun olarak işaretlenir. Bu nedenle, hızlı kod oluşturmak için -O3 kullanmak genellikle uygun olduğunda (örneğin bir profil oluşturucu L1I'nin kaçırdığını gösterdiğinde) -O2 veya -Os'a (kod boyutu için optimize etmeye çalışır) düşmek için iyi bir fikirdir.
Eğer optimizasyonu uç noktalara taşımak istiyorsanız, - gcc'de bazı optimizasyonlarla ilişkili maliyetleri artırabilirsiniz. Ek olarak, gcc'nin artık yalnızca bu işlevler için optimizasyon ayarlarını kontrol eden işlevlere öznitelik koyma yeteneğine sahip olduğunu unutmayın, bu nedenle bir işlevde -O3 ile ilgili bir sorununuz olduğunu fark ettiğinizde (veya yalnızca bu işlev için özel bayraklar denemek istiyorsanız), tüm dosyayı, hatta tüm projeyi O2 ile derlemenize gerek yoktur.
otoh -Ofast kullanırken dikkatli olunması gerektiği anlaşılıyor:
-Ofast tüm -O3 optimizasyonlarını mümkün kılar. Ayrıca tüm standart uyumlu programlar için geçerli olmayan optimizasyonları etkinleştirir.
bu da -O3'ün tamamen standartlara uygun olması gerektiği sonucuna varmamı sağlıyor.