亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 服務器 > Linux服務器 > 正文

Linux編譯優化必須掌握的幾個姿勢總結

2024-09-05 23:04:59
字體:
來源:轉載
供稿:網友

01、編譯選項和內核編譯

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

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

Linux,編譯,優化

當選擇了

CONFIG_CC_OPTIMIZE_FOR_SIZE

它會是Os,否則就是O2。

其實O2和Os,都是一些優化選項的集合:

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

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

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

發現差異小的可憐:

Linux,編譯,優化

Linux,編譯,優化

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

Linux,編譯,優化

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

Linux,編譯,優化

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

02、一個簡單的例子

下面的代碼:

Linux,編譯,優化

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

$ gcc -O0 cc.ccc.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()沒有定義也沒有關系。

把代碼稍微改一下后:

Linux,編譯,優化

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就過不了。內核里面有許多類似設想編譯器會進行優化的代碼。

3.我們不想inline了

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

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

Linux,編譯,優化

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

4.我不想被優化

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

Linux,編譯,優化

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

總結

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


注:相關教程知識閱讀請移步到服務器教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品夜色7777狼人| 欧美激情欧美激情| 韩曰欧美视频免费观看| 久久久久久久久国产精品| 色噜噜国产精品视频一区二区| 久久久亚洲精选| 国产精品女视频| 日韩av在线精品| 日韩电影中文 亚洲精品乱码| 亚洲免费视频在线观看| 欧美精品成人91久久久久久久| 欧美成人精品在线观看| 91久久久久久久久久久久久| 欧美大片在线看| 欧美一级黄色网| 亚洲国产天堂久久综合网| 九九热最新视频//这里只有精品| 色狠狠av一区二区三区香蕉蜜桃| 九九精品视频在线观看| 热久久这里只有精品| 国产精品久久婷婷六月丁香| 日韩小视频在线| 国产精品黄页免费高清在线观看| 久久在线免费观看视频| 日韩av色在线| 日韩**中文字幕毛片| 亚洲精品720p| 成人av在线天堂| 色爱av美腿丝袜综合粉嫩av| 亚洲深夜福利网站| 日韩中文字幕在线免费观看| 精品福利一区二区| 亚洲精品欧美日韩| 欧美激情精品久久久久久蜜臀| 中文字幕日韩av电影| 国产精品福利网| 亚洲国产精品女人久久久| 2023亚洲男人天堂| 亚洲国产婷婷香蕉久久久久久| 久久久成人av| 国产主播欧美精品| 久久精品国产综合| 亚洲男人第一网站| 亚洲高清福利视频| 国产精品视频白浆免费视频| 精品国内产的精品视频在线观看| 亚洲精品久久久久中文字幕二区| 国产精品久久久久久久久男| 亚洲人成网站免费播放| 久久久久久久久中文字幕| 成人欧美一区二区三区黑人孕妇| 国产综合在线看| 久久久噜噜噜久久| 中文字幕日韩免费视频| 成人xxxxx| 亚洲新中文字幕| 国内精久久久久久久久久人| 色哟哟网站入口亚洲精品| 国产一区二区三区高清在线观看| 黄色成人在线免费| 国产欧美日韩最新| 亚洲日韩欧美视频一区| 日本道色综合久久影院| 97人人爽人人喊人人模波多| 欧美xxxx18性欧美| 久久国产精品影片| 国产日产欧美a一级在线| 一区二区三区视频免费在线观看| 欧美黑人极品猛少妇色xxxxx| 欧美日韩一区二区免费视频| 久久精品国产99国产精品澳门| 中文字幕亚洲字幕| 欧美亚洲成人精品| 欧美成人免费全部观看天天性色| 96精品久久久久中文字幕| 亚洲人成电影网站色www| 日韩va亚洲va欧洲va国产| 国产精品久久久久久久9999| 亚洲色图狂野欧美| 中文字幕欧美日韩在线| 亚洲成人久久久久| 国产成人精品999| 亚洲色图偷窥自拍| 69久久夜色精品国产69乱青草| 亚洲精品视频网上网址在线观看| 伊人久久久久久久久久久久久| 欧美精品videossex性护士| 日韩在线播放视频| 久久亚洲成人精品| 国产精品va在线播放我和闺蜜| 国产精品专区h在线观看| 久久中文字幕在线| 久久色精品视频| 美女啪啪无遮挡免费久久网站| 久久视频免费在线播放| 国产91在线播放精品91| 一区二区在线视频播放| 国产在线观看一区二区三区| 欧美第一黄网免费网站| 亚洲成人a**站| 日韩精品久久久久久福利| 欧美成人精品三级在线观看| 日本久久久a级免费| 91精品视频在线播放| 日韩免费视频在线观看| 97成人在线视频| 成人两性免费视频| 亚洲国语精品自产拍在线观看| 亚洲成人免费在线视频| 欧美野外wwwxxx| 日韩精品亚洲元码| 国产日韩欧美在线看| 亚洲欧美日韩精品久久| 亚洲黄色在线观看| 欧美激情亚洲国产| 亚洲天堂精品在线| 欧美国产日韩一区二区三区| 亚洲国产精品人久久电影| 久久久久久69| 一区二区亚洲欧洲国产日韩| 色综合久久88色综合天天看泰| 久久这里只有精品99| 韩曰欧美视频免费观看| 欧美一级大片在线免费观看| 久久伊人精品视频| 亚洲欧美国产日韩中文字幕| 激情亚洲一区二区三区四区| 2019国产精品自在线拍国产不卡| 国产精品www网站| 欧美成人激情图片网| 91久热免费在线视频| 色中色综合影院手机版在线观看| 久久精视频免费在线久久完整在线看| 精品女同一区二区三区在线播放| 日韩精品在线免费播放| 国产成人精品久久亚洲高清不卡| 国产精品一区二区久久国产| 91在线高清视频| 国产在线观看不卡| 亚洲人成电影在线| 国产一区二区三区四区福利| 久久久免费观看| 亚洲无线码在线一区观看| 国内外成人免费激情在线视频| 日韩中文娱乐网| 美女视频黄免费的亚洲男人天堂| 成人春色激情网| 欧美大片va欧美在线播放| 欧美日本亚洲视频| 精品网站999www| 久久精品视频播放| 久久久999精品视频| 一区二区av在线| 美乳少妇欧美精品| 亚洲福利视频久久| 伦理中文字幕亚洲| 最近免费中文字幕视频2019| 欧美自拍视频在线观看| 亚洲精品视频免费| 日韩av在线影视| 久久中文字幕在线| 欧美激情久久久久| 亚洲欧美日韩爽爽影院| 成人黄色在线观看|