C/C++學習 - gcc編譯過程查看彙編代碼

來源:互聯網
上載者:User

標籤:編譯   gcc   彙編代碼   

    • GCC
      • GCC參數
      • 舉例

GCC

gcc大家都很熟悉,是個編譯器,功能強大,全稱是:GUN GCC。

平時大家都簡單的稱為:GCC, 功能強大,能夠編譯很多的語言。包括:c, c++, java, ada等…

GCC參數

gcc平時有很多參數,在平時我編譯小程式的時候,都直接gcc -o object source.c就可以了。

但是有一次我想查看我同樣目的但是不同寫法的兩個代碼是執行效率上是否有差別。所以我就查了下gcc編譯過程中的彙編代碼的參數。

參數 說明
-c 只編譯不連結,產生*.o檔案
-S 產生彙編代碼*.s檔案
-E 先行編譯 產生*.i檔案
-g 在可執行程式裡包含了調試資訊,可用 gdb 調試
-o 把輸出檔案輸出到指定檔案裡
-static 連結靜態連結庫
-library 連結名為library的連結庫
舉例

使用方法比較簡單:

  • 首先先行編譯:
gcc -E hello.c -o hello.i

這樣我們就得到了一個先行編譯的檔案。
裡面是一些:

# 1 "main.cpp"# 1 "<built-in>" 1# 1 "<built-in>" 3# 175 "<built-in>" 3# 1 "<command line>" 1# 1 "<built-in>" 2# 1 "main.cpp" 2# 1 "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/iostream" 1 3# 37 "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/iostream" 3# 1 "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/__config" 1 3# 16 "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/__config" 3# 226 "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/__config" 3typedef __char16_t char16_t;typedef __char32_t char32_t;# 349 "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/__config" 3...

如這樣的東西,就是把一些標頭檔放到裡面神馬的。

  • 然後可以連結:
gcc -S hello.i -o hello.s

裡面就是彙編代碼了。如下:

    .section    __TEXT,__text,regular,pure_instructions    .section    __TEXT,__const    .align  4LCPI0_0:    .long   1127219200              ## 0x43300000    .long   1160773632              ## 0x45300000    .long   0                       ## 0x0    .long   0                       ## 0x0LCPI0_1:    .quad   4841369599423283200     ## double 4.503600e+15    .quad   4985484787499139072     ## double 1.934281e+25    .section    __TEXT,__text,regular,pure_instructions    .globl  _main    .align  4, 0x90_main:                                  ## @main    .cfi_startproc## BB#0:    pushq   %rbpLtmp2:    .cfi_def_cfa_offset 16Ltmp3:    .cfi_offset %rbp, -16    movq    %rsp, %rbp...

原諒我對彙編比較白癡,我只能看懂很少一點點彙編代碼,想學都拖了好久了 TT

  • 然後進行編譯,不連結產生.o檔案。
gcc -c hello.s -o hello.o

這個時候已經沒辦法用文字編輯器開啟查看了。已經是二進位檔案了。開啟也都是0 1
我用sublime text 2 開啟後是一堆16進位的代碼了。

  • 然後產生可執行檔:
gcc hello.o -o hello

這個時候,連結成功,編譯為可執行檔了。

執行的時候只用./hello就可以了。

C/C++學習 - gcc編譯過程查看彙編代碼

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.