Linux下C編程基礎(chǔ)之:gcc編譯器
(4)優(yōu)化選項(xiàng)。
gcc可以對代碼進(jìn)行優(yōu)化,它通過編譯選項(xiàng)“-On”來控制優(yōu)化代碼的生成,其中n是一個(gè)代表優(yōu)化級(jí)別的整數(shù)。對于不同版本的gcc來講,n的取值范圍及其對應(yīng)的優(yōu)化效果可能并不完全相同,比較典型的范圍是從0變化到2或3。
不同的優(yōu)化級(jí)別對應(yīng)不同的優(yōu)化處理工作。如使用優(yōu)化選項(xiàng)“-O”主要進(jìn)行線程跳轉(zhuǎn)(ThreadJump)和延遲退棧(DeferredStackPops)兩種優(yōu)化。使用優(yōu)化選項(xiàng)“-O2”除了完成所有“-O1”級(jí)別的優(yōu)化之外,同時(shí)還要進(jìn)行一些額外的調(diào)整工作,如處理器指令調(diào)度等。選項(xiàng)“-O3”則還包括循環(huán)展開和其他一些與處理器特性相關(guān)的優(yōu)化工作。
雖然優(yōu)化選項(xiàng)可以加速代碼的運(yùn)行速度,但對于調(diào)試而言將是一個(gè)很大的挑戰(zhàn)。因?yàn)榇a在經(jīng)過優(yōu)化之后,原先在源程序中聲明和使用的變量很可能不再使用,控制流也可能會(huì)突然跳轉(zhuǎn)到意外的地方,循環(huán)語句也有可能因?yàn)檠h(huán)展開而變得到處都有,所有這些對調(diào)試來講都將是一場噩夢。所以筆者建議在調(diào)試的時(shí)候最好不使用任何優(yōu)化選項(xiàng),只有當(dāng)程序在最終發(fā)行的時(shí)候才考慮對其進(jìn)行優(yōu)化。
(5)體系結(jié)構(gòu)相關(guān)選項(xiàng)。
gcc的體系結(jié)構(gòu)相關(guān)選項(xiàng)如表3.10所示。
表3.10 gcc體系結(jié)構(gòu)相關(guān)選項(xiàng)列表
選項(xiàng) | 含義 |
-mcpu=type | 針對不同的CPU使用相應(yīng)的CPU指令??蛇x擇的type有i386、i486、pentium及i686等 |
-mieee-fp | 使用IEEE標(biāo)準(zhǔn)進(jìn)行浮點(diǎn)數(shù)的比較 |
-mno-ieee-fp | 不使用IEEE標(biāo)準(zhǔn)進(jìn)行浮點(diǎn)數(shù)的比較 |
-msoft-float | 輸出包含浮點(diǎn)庫調(diào)用的目標(biāo)代碼 |
-mshort | 把int類型作為16位處理,相當(dāng)于shortint |
-mrtd | 強(qiáng)行將函數(shù)參數(shù)個(gè)數(shù)固定的函數(shù)用retNUM返回,節(jié)省調(diào)用函數(shù)的一條指令 |
這些體系結(jié)構(gòu)相關(guān)選項(xiàng)在嵌入式的設(shè)計(jì)中會(huì)有較多的應(yīng)用,讀者需根據(jù)不同體系結(jié)構(gòu)將對應(yīng)的選項(xiàng)進(jìn)行組合處理。在本書后面涉及具體實(shí)例時(shí)將會(huì)有針對性的講解。
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)linux相關(guān)文章:linux教程
c++相關(guān)文章:c++教程
評(píng)論