最近我用GCC編譯了一個程序,但是當我用-O1
優化選項時,出錯了;使用-O0
時沒有問題。所以我用-O1
替代了那些官方文檔說的選項,比如-fauto-inc-dec
,-fcompare-elim
,-fcprop-registers
等 但是,它工作正常,沒有任何bug但性能不是很好。GCC優化選項
我想知道-O1
是否等同於那些小編譯選項?
最近我用GCC編譯了一個程序,但是當我用-O1
優化選項時,出錯了;使用-O0
時沒有問題。所以我用-O1
替代了那些官方文檔說的選項,比如-fauto-inc-dec
,-fcompare-elim
,-fcprop-registers
等 但是,它工作正常,沒有任何bug但性能不是很好。GCC優化選項
我想知道-O1
是否等同於那些小編譯選項?
在所有(-O1
VS -O0
)打開優化在-f
標誌不控制的方式改變了代碼生成。請注意0中的這句話:
並非所有的優化都由一個標誌直接控制。本節僅列出具有標誌的優化。
一些細節取決於非常具體的gcc版本號(例如,gcc 4.2 vs gcc 4.5,4.9等)。
The -O1
will turn on the following optimization flags:
-fauto-inc-dec
-fcompare-elim
-fcprop-registers
-fdce
-fdefer-pop
-fdelayed-branch
-fdse
-fguess-branch-probability
-fif-conversion2
-fif-conversion
-fipa-pure-const
-fipa-profile
-fipa-reference
-fmerge-constants
-fsplit-wide-types
-ftree-bit-ccp
-ftree-builtin-call-dce
-ftree-ccp
-ftree-ch
-ftree-copyrename
-ftree-dce
-ftree-dominator-opts
-ftree-dse
-ftree-forwprop
-ftree-fre
-ftree-phiprop
-ftree-slsr
-ftree-sra
-ftree-pta
-ftree-ter
-funit-at-a-time
這聽起來像你的程序實際上有一個錯誤,可能是由未定義的行爲造成的,偶然與-O0一起使用。你應該修復這個錯誤。 –
謝謝,先生。這是非常可能的。 Howerver,我對-O1和-O1打開的優化標誌的區別感興趣。爲什麼他們有不同的效果? – sosohu