GCC -O 優(yōu)化選項(xiàng)說(shuō)明

編譯耗時(shí)

編譯結(jié)果大小(BYTES)

運(yùn)行耗時(shí)

不設(shè)置O選項(xiàng)

real 0m20.079s

user 0m18.943s

sys 0m1.030s

1590048

real 0m13.143s

user 0m12.996s

sys 0m0.124s

-O0:這個(gè)等級(jí)(字母“O”后面跟個(gè)零)關(guān)閉所有優(yōu)化選項(xiàng),也是CFLAGS或CXXFLAGS中沒(méi)有設(shè)置-O等級(jí)時(shí)的默認(rèn)等級(jí)。這樣就不會(huì)優(yōu)化代碼,這通常不是我們想要的。 

real 0m19.957s

user 0m18.521s

sys 0m1.406s

1590048

real 0m12.816s

user 0m12.661s

sys 0m0.138s

-O1:這是最基本的優(yōu)化等級(jí)。編譯器會(huì)在不花費(fèi)太多編譯時(shí)間的同時(shí)試圖生成更快更小的代碼。這些優(yōu)化是非常基礎(chǔ)的,但一般這些任務(wù)肯定能順利完成。 

real 0m22.782s

user 0m21.750s

sys 0m0.978s

599306

real 0m5.074s

user 0m4.951s

sys 0m0.115s

 

-O2:-O1的進(jìn)階。這是推薦的優(yōu)化等級(jí),除非你有特殊的需求。-O2會(huì)比-O1啟用多一些標(biāo)記。設(shè)置了-O2后,編譯器會(huì)試圖提高代碼性能而不會(huì)增大體積和大量占用的編譯時(shí)間。 

real 0m26.258s

user 0m25.313s

sys 0m0.887s

594456

real 0m4.621s

user 0m4.491s

sys 0m0.123s

-O3:這是最高最危險(xiǎn)的優(yōu)化等級(jí)。用這個(gè)選項(xiàng)會(huì)延長(zhǎng)編譯代碼的時(shí)間,并且在使用gcc4.x的系統(tǒng)里不應(yīng)全局啟用。自從3.x版本以來(lái)gcc的行為已經(jīng)有了極大地改變。在3.x,-O3生成的代碼也只是比-O2快一點(diǎn)點(diǎn)而已,而gcc4.x中還未必更快。用-O3來(lái)編譯所有的軟件包將產(chǎn)生更大體積更耗內(nèi)存的二進(jìn)制文件,大大增加編譯失敗的機(jī)會(huì)或不可預(yù)知的程序行為(包括錯(cuò)誤)。這樣做將得不償失,記住過(guò)猶不及。在gcc 4.x.中使用-O3是不推薦的。 

real 0m29.642s

user 0m28.671s

sys 0m0.852s

659664

real 0m4.669s

user 0m4.521s

sys 0m0.141s

-O4 等價(jià)于-O3

-O5 等價(jià)于-O3

....

real 0m30.264s

user 0m29.236s

sys 0m0.969s

659664

real 0m4.481s

user 0m4.331s

sys 0m0.144s

 

-Os:這個(gè)等級(jí)用來(lái)優(yōu)化代碼尺寸。其中啟用了-O2中不會(huì)增加磁盤(pán)空間占用的代碼生成選項(xiàng)。這對(duì)于磁盤(pán)空間極其緊張或者CPU緩存較小的機(jī)器非常有用。但也可能產(chǎn)生些許問(wèn)題,因此軟件樹(shù)中的大部分ebuild都過(guò)濾掉這個(gè)等級(jí)的優(yōu)化。使用-Os是不推薦的。 

real 0m24.206s

user 0m23.285s

sys 0m0.855s

 

519903

real 0m5.188s

user 0m5.050s

sys 0m0.132s