GCC 優化選項 -O -O0 -O1 -O2 -O3 -Os 簡單介紹

gcc默認提供了5級優化選項:
  • -O/-O0:無優化(默認)
  • -O1:使用能減少目標文件大小以及執行時間並且不會使編譯時間明顯增加的優化。該模式在編譯大型程序的時候會花費更多的時間和內存。在-O1下:編譯會嘗試減少代碼體積和代碼運行時間,但是並不執行會花費大量時間的優化操作。
  • -O2: 包含-O1的優化並增加了不需要在目標文件大小和執行速度上進行折衷的優化。GCC執行幾乎所有支持的操作但不包括空間和速度之間權衡的優化,編譯器不執行循環展開以及函數內聯。這是推薦的優化等級,除非你有特殊的需求。-O2會比-O1啓用多一些標記。與-O1比較該優化-O2將會花費更多的編譯時間當然也會生成性能更好的代碼。
  • -Os:專門優化目標文件大小,執行所有的不增加目標文件大小的-O2優化選項。同時-Os還會執行更加優化程序空間的選項。這對於磁盤空間極其緊張或者CPU緩存較小的機器非常有用。但也可能產生些許問題,因此軟件樹中的大部分ebuild都過濾掉這個等級的優化。使用-Os是不推薦的。
  • -O3: 打開所有-O2的優化選項並且增加 -finline-functions, -funswitch-loops,-fpredictive-commoning, -fgcse-after-reload and -ftree-vectorize優化選項。這是最高最危險的優化等級。用這個選項會延長編譯代碼的時間,並且在使用gcc4.x的系統裏不應全局啓用。自從3.x版本以來gcc的行爲已經有了極大地改變。在3.x,-O3生成的代碼也只是比-O2快一點點而已,而gcc4.x中還未必更快。用-O3來編譯所有的軟件包將產生更大體積更耗內存的二進制文件,大大增加編譯失敗的機會或不可預知的程序行爲(包括錯誤)。這樣做將得不償失,記住過猶不及。在gcc 4.x.中使用-O3是不推薦的。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章