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