校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > Linux編譯優(yōu)化必須掌握的幾個姿勢總結

Linux編譯優(yōu)化必須掌握的幾個姿勢總結

熱門標簽:新鄉(xiāng)人工智能電話機器人加盟 福州呼叫中心外呼系統(tǒng)哪家好 臨汾電銷機器人費用 地圖標注w是什么方向 400電話申請找哪家公司 河南省鄭州市地圖標注 昆明外呼系統(tǒng) 七大洲地圖標注 地圖標注需要提交啥資料入駐

01、編譯選項和內(nèi)核編譯

Linux內(nèi)核(英語:linux kernel),是一種計算機操作系統(tǒng)內(nèi)核,已C語言和匯編語言寫成,匹配POSIX標準,以GNU通用公共許可證發(fā)布。從技術上說Linux只是一個內(nèi)核。“內(nèi)核”指的是一個提供硬件抽象層、磁盤及文件控制、多任務等功能的系統(tǒng)軟件。

所以首先我們都知道,Linux內(nèi)核如果用O0編譯,是無法編譯過的,Linux的內(nèi)核編譯,要么是O2,要么是Os,這點從Linux的Makefile里面可以看出:

當選擇了

CONFIG_CC_OPTIMIZE_FOR_SIZE

它會是Os,否則就是O2。

其實O2和Os,都是一些優(yōu)化選項的集合:

gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts

gcc -c -Q -Os --help=optimizers > /tmp/Os-opts

前者傾向于基于速度的優(yōu)化,后者傾向于基于size更小的優(yōu)化。對比二者的開關選項:

meld /tmp/O2-opts /tmp/Os-opts 

發(fā)現(xiàn)差異小的可憐:

O2和Os都使能了inline small函數(shù)和called once的函數(shù),但是O2里面-finline-functions是關閉的,而Os里面是開的。O2里面optimize-strlen是開的,Os里面這個選項是關閉的。相關選項的含義可以通過"man gcc"看出(有問題,找男人),譬如man gcc后檢索inline-functions:

從O0到O1,O2,O3,是一個開啟的優(yōu)化選項逐步加大的過程:

kernel用O0編譯不過,是因為kernel本身也沒有想用O0能夠編譯過,它的設計里面包含了編譯會優(yōu)化的假想。下面我們用一個簡單的例子來說明。

02、一個簡單的例子

下面的代碼:

O0編譯會報如下錯,說f()函數(shù)沒有定義:

$ gcc -O0 cc.c

cc.c:1:13: warning: ‘f' used but never defined [enabled by default]

 void f(void);

    ^

/tmp/ccTwwtHG.o: In function `main':

cc.c:(.text+0x19): undefined reference to `f'

collect2: error: ld returned 1 exit status

但是用O2編譯,則沒有問題:

$ gcc -O2 cc.c

原因在于,O2編譯,它意識到a==1,所以if(a>2),它不會成立,所以f()沒有定義也沒有關系。

把代碼稍微改一下后:

O2這個時候也不行了:

$ gcc -O2 cc.c

/tmp/ccXiyBHn.o: In function `main':

cc.c:(.text.startup+0x7): undefined reference to `f'

collect2: error: ld returned 1 exit status

所以,通過這個例子,大家可以看出來為什么同樣的代碼,用O2就可以過,用O0就過不了。內(nèi)核里面有許多類似設想編譯器會進行優(yōu)化的代碼。

3.我們不想inline了

由于編譯的優(yōu)化,有些函數(shù)(比如小函數(shù)和全工程里面只被一個人調(diào)用的函數(shù))雖然沒有顯示地寫成inline,但是編譯器優(yōu)化為inline了,這給調(diào)試造成了一些麻煩,因為找不到這個函數(shù)對應的symbol了。

這個時候,我們可以顯示地寫明某些函數(shù)我們不想inline:

否則,上面2個函數(shù),即便你代碼里面沒有寫inline,由于O2和Os使能了相關的inline選項,也可能被編譯器自動inline掉,如果我們想拒絕inline,可以通過noline來標識。

4.我不想被優(yōu)化

在全局已經(jīng)使能O1, O2, O3, Os的情況下,某個單獨的函數(shù)我們不想做任何的優(yōu)化,可以用__attribute__((optimize("O0")))來修飾這個函數(shù),比如我們把上述用O2可以編譯過的代碼進行如下修改:

重新用O2編譯:

$ gcc -O2 cc.c

/tmp/cc8M338p.o: In function `main':

cc.c:(.text+0x19): undefined reference to `f'

collect2: error: ld returned 1 exit status

5. 總結的話

下面給幾條實踐指南:

  1. 盡量不要嘗試用O0去編譯內(nèi)核,這不符合真實的工程實踐,也不太被主流Linux社區(qū)所支持;內(nèi)核依賴O2/Os去做較多的優(yōu)化;
  2. 追求你的代碼在O2的情況下,仍然是正確的,代碼要經(jīng)得起編譯優(yōu)化;比如O0工作正常,而O2不正常,應該盡可能從自身找原因,分析匯編;
  3. 如果在全局優(yōu)化的情況下,想針對某個局部避免優(yōu)化,可以嘗試用noinline,__attribute__((optimize("O0")))等進行外科手術式地調(diào)整。

總結

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

標簽:股票 岳陽 紅河 鎮(zhèn)江 烏海 海口 四川 臨沂

巨人網(wǎng)絡通訊聲明:本文標題《Linux編譯優(yōu)化必須掌握的幾個姿勢總結》,本文關鍵詞  Linux,編譯,優(yōu)化,必須,掌握,;如發(fā)現(xiàn)本文內(nèi)容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Linux編譯優(yōu)化必須掌握的幾個姿勢總結》相關的同類信息!
  • 本頁收集關于Linux編譯優(yōu)化必須掌握的幾個姿勢總結的相關信息資訊供網(wǎng)民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    精品日本一线二线三线不卡| 国产亚洲欧美日韩俺去了| 国产一区日韩二区欧美三区| 亚洲精品久久久蜜桃| 日韩一级完整毛片| 一本色道久久综合狠狠躁的推荐| 日韩福利电影在线观看| 国产精品白丝在线| 精品免费视频一区二区| 欧美日韩国产精品成人| 成人a级免费电影| 奇米一区二区三区| 一区二区三区高清| 国产亚洲欧美日韩日本| 精品三级在线观看| 欧美高清精品3d| 在线一区二区观看| 96av麻豆蜜桃一区二区| 国产精品一级片| 精品中文字幕一区二区小辣椒| 亚洲一区视频在线观看视频| 国产精品电影一区二区| 欧美videossexotv100| 欧美久久婷婷综合色| 欧日韩精品视频| 91在线免费视频观看| 粉嫩一区二区三区在线看| 久久99精品一区二区三区三区| 亚洲第一狼人社区| 亚洲国产中文字幕在线视频综合| 久久成人免费网| 三级在线观看一区二区| 亚洲国产日韩一级| 一区二区成人在线| 一区二区三区不卡视频在线观看 | 亚洲gay无套男同| 亚洲免费观看高清完整版在线| 中文字幕欧美国产| 久久久国产午夜精品| 精品粉嫩超白一线天av| 精品国产3级a| 精品粉嫩aⅴ一区二区三区四区| 欧美一区二区视频免费观看| 777亚洲妇女| 日韩精品一区二区三区老鸭窝| 日韩精品一区二区三区中文精品| 日韩一区二区精品| 精品久久久影院| 久久久久高清精品| 久久综合色天天久久综合图片| 久久久精品日韩欧美| 国产日韩欧美一区二区三区乱码 | 中文字幕在线不卡国产视频| 最新高清无码专区| 亚洲激情欧美激情| 午夜成人在线视频| 激情综合色播激情啊| 懂色av一区二区夜夜嗨| 91在线一区二区| 欧美午夜一区二区三区 | 国产精品的网站| 日韩毛片视频在线看| 亚洲宅男天堂在线观看无病毒| 亚洲妇女屁股眼交7| 青椒成人免费视频| 国产精品亚洲一区二区三区在线| 成人小视频免费观看| 日本精品一级二级| 91精品国产欧美日韩| 久久久精品综合| 亚洲欧美aⅴ...| 午夜精品久久久久久久| 狠狠色综合日日| 欧美一区二区在线观看| 精品国产一二三| 国产精品久久久久久久久快鸭| 亚洲影院在线观看| 精品影视av免费| 91亚洲精品一区二区乱码| 欧美日韩电影在线播放| 久久综合久久综合久久综合| 亚洲女女做受ⅹxx高潮| 精品影视av免费| 色综合视频一区二区三区高清| 91精选在线观看| 中文字幕一区二区三区四区 | 波多野结衣91| 欧美日本一道本| 欧美国产日韩在线观看| 亚洲1区2区3区4区| 亚洲一区二区欧美激情| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 欧美日韩一区二区三区在线| 久久综合久久鬼色中文字| 亚洲午夜在线电影| av男人天堂一区| 777午夜精品免费视频| 日韩一区中文字幕| 久久国产欧美日韩精品| 在线欧美一区二区| 亚洲国产精品精华液2区45| 日产国产欧美视频一区精品| 99久久精品费精品国产一区二区| 日韩欧美国产综合| 夜色激情一区二区| 不卡欧美aaaaa| 久久在线观看免费| 日本欧美一区二区在线观看| 91免费看片在线观看| 国产欧美日韩一区二区三区在线观看| 天天做天天摸天天爽国产一区 | 精品国产一区久久| 视频一区二区欧美| 欧美色综合网站| 日韩毛片精品高清免费| 成人激情免费网站| 久久综合成人精品亚洲另类欧美 | 99视频在线观看一区三区| 久久久三级国产网站| 日本不卡高清视频| 欧美三级乱人伦电影| 亚洲欧美另类久久久精品| 成人av电影在线网| 日本一区二区三区国色天香| 国产一区二区三区久久久 | 91麻豆精品国产91久久久使用方法 | 91美女在线看| 中文字幕欧美激情一区| 国产成人精品亚洲午夜麻豆| 久久久青草青青国产亚洲免观| 看国产成人h片视频| 日韩一区二区在线看片| 日本中文一区二区三区| 欧美精品一卡二卡| 亚洲福利一二三区| 欧美日韩一二三区| 婷婷国产v国产偷v亚洲高清| 制服丝袜亚洲网站| 久久se这里有精品| 精品国精品国产| 国产大陆精品国产| 国产欧美一区二区在线观看| 国产99久久久国产精品潘金| 欧美国产成人精品| 97成人超碰视| 亚洲国产精品视频| 91精品国产综合久久精品麻豆 | 欧美日韩欧美一区二区| 亚洲已满18点击进入久久| 欧美日韩免费观看一区二区三区| 亚洲国产va精品久久久不卡综合| 欧美久久免费观看| 奇米色一区二区| 久久久精品免费观看| 成人91在线观看| 亚洲伊人伊色伊影伊综合网| 欧美一区二区三区四区在线观看| 毛片基地黄久久久久久天堂| 久久综合色之久久综合| av电影天堂一区二区在线| 樱桃视频在线观看一区| 欧美日韩第一区日日骚| 美女性感视频久久| 欧美激情中文字幕| 91在线播放网址| 亚洲高清一区二区三区| 久久影视一区二区| 不卡电影一区二区三区| 亚洲小说春色综合另类电影| 精品欧美黑人一区二区三区| 波多野结衣的一区二区三区| 偷拍与自拍一区| 久久精品夜色噜噜亚洲aⅴ| 91亚洲午夜精品久久久久久| 奇米综合一区二区三区精品视频| 久久精品人人做人人爽97| 日韩精品影音先锋| 成人av在线观| 免费成人在线播放| 亚洲欧洲成人自拍| 日韩一区二区三区观看| www.色精品| 精品一区免费av| 夜夜嗨av一区二区三区网页| 久久青草国产手机看片福利盒子 | 久久久久久麻豆| 在线免费不卡电影| 国产福利一区二区三区视频在线| 亚洲美腿欧美偷拍| 久久免费视频色| 欧美日韩色综合| 99久久99久久精品免费观看| 美女爽到高潮91| 亚洲欧美区自拍先锋| 久久综合九色综合欧美98| 欧美日韩不卡视频| www.久久精品| 国产精品一二三四| 麻豆成人91精品二区三区| 亚洲一卡二卡三卡四卡|