GCC -O 優化選項說明 | 編譯耗時 | 編譯結果大小(BYTES) | 運行耗時 |
不設置O選項 | real 0m20.079s user 0m18.943s sys 0m1.030s | 1590048 | real 0m13.143s user 0m12.996s sys 0m0.124s |
-O0:這個等級(字母“O”后面跟個零)關閉所有優化選項,也是CFLAGS或CXXFLAGS中沒有設置-O等級時的默認等級。這樣就不會優化代碼,這通常不是我們想要的。 | real 0m19.957s user 0m18.521s sys 0m1.406s | 1590048 | real 0m12.816s user 0m12.661s sys 0m0.138s |
-O1:這是最基本的優化等級。編譯器會在不花費太多編譯時間的同時試圖生成更快更小的代碼。這些優化是非常基礎的,但一般這些任務肯定能順利完成。 | real 0m22.782s user 0m21.750s sys 0m0.978s | 599306 | real 0m5.074s user 0m4.951s sys 0m0.115s |
-O2:-O1的進階。這是推薦的優化等級,除非你有特殊的需求。-O2會比-O1啟用多一些標記。設置了-O2后,編譯器會試圖提高代碼性能而不會增大體積和大量占用的編譯時間。 | real 0m26.258s user 0m25.313s sys 0m0.887s | 594456 | real 0m4.621s user 0m4.491s sys 0m0.123s |
-O3:這是最高最危險的優化等級。用這個選項會延長編譯代碼的時間,并且在使用gcc4.x的系統里不應全局啟用。自從3.x版本以來gcc的行為已經有了極大地改變。在3.x,-O3生成的代碼也只是比-O2快一點點而已,而gcc4.x中還未必更快。用-O3來編譯所有的軟件包將產生更大體積更耗內存的二進制文件,大大增加編譯失敗的機會或不可預知的程序行為(包括錯誤)。這樣做將得不償失,記住過猶不及。在gcc 4.x.中使用-O3是不推薦的。 | real 0m29.642s user 0m28.671s sys 0m0.852s | 659664 | real 0m4.669s user 0m4.521s sys 0m0.141s |
-O4 等價于-O3 -O5 等價于-O3 .... | real 0m30.264s user 0m29.236s sys 0m0.969s | 659664 | real 0m4.481s user 0m4.331s sys 0m0.144s |
-Os:這個等級用來優化代碼尺寸。其中啟用了-O2中不會增加磁盤空間占用的代碼生成選項。這對于磁盤空間極其緊張或者CPU緩存較小的機器非常有用。但也可能產生些許問題,因此軟件樹中的大部分ebuild都過濾掉這個等級的優化。使用-Os是不推薦的。 | real 0m24.206s user 0m23.285s sys 0m0.855s | 519903 | real 0m5.188s user 0m5.050s sys 0m0.132s |