-O參數隻有5個級別,並不是設置的越高越好(以前的GCC支持很高的級別,但是現在確實只有5級)
◆-O0:關閉所有優化選項
◆-O1:基本優化,編譯器會生成更快的代碼
◆-O2:-O1的升級版,推薦使用
◆-O3:這是目前最高的優化級別,它會使用更多的編譯時間,雖然它生成的代碼只會比-O2塊一點點(GCC3.x中是這樣的,但是在GCC4.x中有時候可能還沒有-O2快),但是它會增大二進制文档的體積並讓他們更消耗内存,因此在GCC4.x中-O3是不推薦的。
◆-Os:這個級別是用來優化代碼尺寸的,他只是給一些CPU緩存或是磁盤空間小的機器使用
-O0: 無優化。
-O和-O1: 使用能減少目標代碼尺寸以及執行時間並且不會使編譯時間明顯增加的優化。在編譯大型程序的時候會顯著增加編譯時内存的使用。
-O2: 包含-O1的優化並增加了不需要在目標文档大小和執行速度上進行折衷的優化。編譯器不執行循環展開以及函數内聯。此選項將增加編譯時間和目標文档的執行性能。
-Os: 可以看成 -O2.5,專門優化目標文档大小,執行所有的不增加目標文档大小的-O2優化選項,並且執行專門減小目標文档大小的優化選項。適用於磁盤空間緊張時使用。但有可能有未知的問題發生,況且目前硬盤容量很大,常用程序無必要使用。
-O3: 打開所有 -O2 的優化選項外增加 -finline-functions、-funswitch-loops、-fgcse-after-reload 優化選項。相對於 -O2 性能並未有較多提高,編譯時間也最長,生成的目標文档也更大更佔内存,有時性能不增反而降低,甚至産生不可預知的問題(包括錯誤),所以並不被大多數軟體安裝推薦,除非有絕對把握方可使用此優化級別。
修改GCC編譯參數,提高編譯優化級別,此方法適用於所有通過GCC編譯安裝的程序,不止Nginx。穩妥起見用 -O2,這也是大多數軟體編譯推薦的優化級別。查看Nginx源碼文档 auto/cc/gcc,搜索NGX_GCC_OPT,默認GCC編譯參數爲-O,可以直接修改内容爲NGX_GCC_OPT="-O2"或者在 ./configure配置時添加--with-cc-opt='-O2'選項。