日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

GCC几个选项学习

發(fā)布時(shí)間:2024/4/17 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 GCC几个选项学习 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

http://www.lingcc.com/2011/06/27/11679/

最近研究了一把GCC的選項(xiàng),比較有意思,選些出來(lái),學(xué)習(xí)學(xué)習(xí)。編譯器作為程序員的重要工具,GCC作為編譯器中應(yīng)用最廣泛的,無(wú)不處處體現(xiàn)出貼心的設(shè)計(jì)和功能支持。

Table of Contents

  • 1 -dumpmachine
  • 2 -xc
  • 3 -dM
  • 4 -print-file-name=include
  • 5 -isystem DIR
  • 6 -nostdinc/-nostdinc++
  • 7 -Wp/-Wa/-Wl
  • 8 -EL/-EB
  • 9 -DMACRO/-UMACRO
  • 10 -G num
  • 11 -msym32/-mnosym32
  • 12 -fdelete-null-pointer-checks/-fno-delete-null-pointer-checks
  • 13 -mcheck-zero-division/-mno-check-zero-division
  • 14 -mabicalls/-mno-abicalls
  • 15 -mbranch-likely/-mno-branch-likely
  • 16 -fstack-protector
  • 17 -fstrict-overflow
  • 18 -fconserve-stack
  • 19 參考

1 -dumpmachine

給出當(dāng)前使用GCC的信息,在erlv的Debian AMD64上,結(jié)果如下。
關(guān)于GCC的這些字段是什么意思,請(qǐng)參考這篇博文:

$ gcc -dumpmachine x86_64-linux-gnu

2 -xc

其實(shí),-xc和 “-x c”等同。

  • x用于指定輸入的程序的語(yǔ)言,如果使用該選項(xiàng),GCC就不再根據(jù)文件的后綴名判斷語(yǔ)言類(lèi)型。?

3 -dM

不做實(shí)際的預(yù)處理,僅僅列出所有#define的宏,這些宏大部分與體系結(jié)構(gòu)和GNU相關(guān),或來(lái)自所包含的頭文件。

#程序輸出太長(zhǎng),這里就不列出了 $gcc -E -dM hello.c

另外,還有一些-dCHARS的組合選項(xiàng):

  • -dD:和-dM類(lèi)似,不過(guò)僅僅包含頭文件中定義的宏,不會(huì)輸出預(yù)處理器中默認(rèn)定義的宏,另外會(huì)將源程序代碼也預(yù)處理輸出。
  • -dN:和-dD類(lèi)似,但僅輸出定義的宏的名稱,不輸出宏的值。
  • -dI:給出#include的頭文件,預(yù)計(jì)預(yù)處理的結(jié)果
  • -dU:和-dD類(lèi)似,但僅僅輸出那些在源碼中需要展開(kāi)的,或者其定義會(huì)被測(cè)試到的宏。?

4 -print-file-name=include

打印GCC默認(rèn)搜索include頭文件的路徑

$ gcc -print-file-name=include /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.6.1/include

5 -isystem DIR

將DIR路徑作為頭文件搜索路徑之一。搜索順序: -I指定的文件夾 =》 -isystem指定的文件夾 =》 標(biāo)準(zhǔn)系統(tǒng)頭文件夾。

6 -nostdinc/-nostdinc++

不要搜索標(biāo)準(zhǔn)系統(tǒng)頭文件目錄,僅搜索-I指定的路徑。

7 -Wp/-Wa/-Wl

這三個(gè)分別用來(lái)指定傳遞給 預(yù)處理起、匯編器和鏈接器的參數(shù)。

  • -Wp,option 等價(jià)于 -Xpreprocessor option
  • -Wa,option 等價(jià)于 -Xassembler option
  • -Wl,option 等價(jià)于 -Xlinker option

8 -EL/-EB

為小尾端/大尾端系統(tǒng)編譯代碼。默認(rèn)是小尾端

9 -DMACRO/-UMACRO

定義宏MACRO/撤銷(xiāo)對(duì)宏MACRO的定義

10 -G num

將全局和靜態(tài)對(duì)象的大小分割成小于num字節(jié)的數(shù)據(jù)放入bss端的小數(shù)據(jù)中,而非正常數(shù)據(jù)中。
默認(rèn)的num的值為8.

由于MIPS在從符號(hào)得到地址時(shí),需要先取出高16位,再取出低16位,做拼接得到最終地址,所以就需要兩次訪存操作。
當(dāng)程序中大量使用靜態(tài)和全局?jǐn)?shù)據(jù)時(shí),這種方式就會(huì)讓程序變慢。
于是就有了利用GP寄存器進(jìn)行優(yōu)化的方法,即采用和GP寄存器做相對(duì)偏移的方式訪存,以便降低訪存次數(shù)。
關(guān)鍵問(wèn)題是編譯器和匯編器需要在編譯時(shí)刻確定哪些變量可以使用GP寄存器訪問(wèn)。
通常的做法是讓大小小于一定值的變量通過(guò)GP寄存器訪問(wèn)。

若num為 0表示將這一優(yōu)化關(guān)閉。

11 -msym32/-mnosym32

不管采取何種ABI,都假設(shè)/不假設(shè)所有符號(hào)都是32位的值。
這一選項(xiàng)配合-mabi=64 和-mno-abicall時(shí)非常有用,因?yàn)榭梢酝ㄟ^(guò)假設(shè)都是32位數(shù)據(jù)生成更小巧更快的符號(hào)地址

12 -fdelete-null-pointer-checks/-fno-delete-null-pointer-checks

delete-null-pointer-checks是一種優(yōu)化手段,通過(guò)全局的數(shù)據(jù)流分析來(lái)識(shí)別和刪除所有對(duì)空指針的檢測(cè)操作。
編譯器假定對(duì)空指針的解引用會(huì)造成程序終止。但因?yàn)橛行┉h(huán)境下,這一結(jié)論并不一定成立,而O2,O3和Os時(shí)會(huì)開(kāi)啟此優(yōu)化。
因此GCC增加了選項(xiàng)-fno-delete-null-pointer-checks

13 -mcheck-zero-division/-mno-check-zero-division

當(dāng)整數(shù)除0操作時(shí),陷入/不陷入

14 -mabicalls/-mno-abicalls

生成/不生成適SVR4形式的動(dòng)態(tài)對(duì)象代碼,默認(rèn)生成。

15 -mbranch-likely/-mno-branch-likely

使用/使用 branch likely 指令,不管所指定體系結(jié)構(gòu)默認(rèn)是否支持。
GCC默認(rèn)會(huì)為支持branch likely指令的體系結(jié)構(gòu)生成branch likely指令。

引入這類(lèi)指令,是為了引入一種很大可能會(huì)發(fā)生跳轉(zhuǎn)的指令,這樣編譯器就能充分的利用MIPS中的delay slot。

16 -fstack-protector

為可能的緩沖區(qū)溢出生成額外的檢測(cè)代碼。

17 -fstrict-overflow

允許編譯器使用嚴(yán)格的有符號(hào)溢出規(guī)則。

18 -fconserve-stack

盡量減小對(duì)棧的使用。

19 參考

  • http://gcc.gnu.org/ml/gcc-help/2006-10/msg00191.html
  • See MIPS Run Linux, 2ed, by Dominic Sweetman, Page 273
  • GCC man pages?

轉(zhuǎn)載于:https://www.cnblogs.com/cnland/archive/2013/02/08/2909248.html

總結(jié)

以上是生活随笔為你收集整理的GCC几个选项学习的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。