gcc優化標志
選項 作用
-ffloat-store
禁止在CPU的寄存器中保存浮點變量的值.這能把CPU寄存器節省下來留作它用,而且可以防止產生過分精確但不必要的浮點數.
-ffast-math
產生浮點數學優化,這能提高速度但違反了IEEE或ANSI/ISO標準.如果程序不需要嚴格遵守IEEE規范,可在編譯浮點密集型的程序時考慮采用這一標志
-finline-functions 把所有的"簡單"函數在調用它們的函數中就地展開.編譯器決定了什么是"簡單"函數.減少處理器與函數相關的開銷是一種基本的優化技術
-funroll-loops 展開所有能在編譯時確定重復次數的循環體.展開循環體后每步循環都能省出幾條CPU指令,這樣大大減少了執行時間
-fomit-frame-pointer 如果函數不需要則丟掉指針,該指針保存在CPU的一個寄存器中.因為去掉了設置,保存和恢復幀指針所必需的指令,所以加快了處理速度.
-fschedule-insns 記錄可能暫停的指令,因為它們正在等候的數據不在CPU中
-fschedule-insns2
執行第二次指令重排序(類似于-fschedule-insns)
-fmove-all-movables
把所有出現在循環體內部但穩定不變的計算移出循環體.這從循環體中去除了不必要的操作,加快了循環的整體運算速度.
內聯和循環展開技術都能夠大大提高程序的執行速度,因為它們都避免了函數調用和變量查找的開銷,但付出的代價往往是大大增加了目標或二進制代碼的大小.
一般而言,Linux程序員似乎愛用優化選項-O2.