3 回答

TA貢獻(xiàn)1845條經(jīng)驗(yàn) 獲得超8個(gè)贊
Stricto sensu,GCC編譯器的中端由優(yōu)化遍歷的序列(實(shí)際上是嵌套樹,在編譯過程中會動態(tài)更改)組成,因此,如果GCC沒有進(jìn)行優(yōu)化,則將無法發(fā)出任何代碼。
想想另一種方式:輸入語言GCC是相當(dāng)豐富的(即使是純C,在那里你有while,for,...),但中間GIMPLE語言是更差(特別是GIMPLE / SSA),所以你需要到應(yīng)用一些轉(zhuǎn)換以將源AST轉(zhuǎn)換為Gimple。這些轉(zhuǎn)換是優(yōu)化過程,幾乎可以定義為。
另請參閱該答案和該答案的圖片(SVG圖片),并閱讀此處提到的參考資料。
您應(yīng)該理解-O0為禁用生成某些可執(zhí)行文件不需要的任何其他優(yōu)化(例如,-O1etc等提供的優(yōu)化)。

TA貢獻(xiàn)1809條經(jīng)驗(yàn) 獲得超8個(gè)贊
為了回答我的問題,我做出了一些結(jié)論和假設(shè):
因此,我想說用O0進(jìn)行編譯并不意味著不會應(yīng)用任何優(yōu)化。如上面@abligh所述,可以減少編譯時(shí)間并改善調(diào)試效果的選項(xiàng)將打開。
換句話說,O0在編譯級別上正在優(yōu)化。生成的二進(jìn)制文件未經(jīng)過優(yōu)化,以簡化調(diào)試過程。
我舉一個(gè)例子:該選項(xiàng)在O0級別啟用
漸進(jìn)式循環(huán)優(yōu)化
在GCC文檔中:
此選項(xiàng)告訴循環(huán)優(yōu)化器使用語言約束來得出循環(huán)迭代次數(shù)的界限。這假定循環(huán)代碼不會通過例如引起有符號整數(shù)溢出或超出范圍的數(shù)組訪問來調(diào)用未定義的行為。循環(huán)迭代次數(shù)的界限用于指導(dǎo)循環(huán)展開和剝離以及循環(huán)退出測試優(yōu)化。默認(rèn)情況下啟用此選項(xiàng)。
因此,對于GCC 4.8.x,默認(rèn)情況下將啟用近50個(gè)選項(xiàng)。
- 3 回答
- 0 關(guān)注
- 1384 瀏覽
添加回答
舉報(bào)