從hello world 看編譯器原理

2021-10-06 17:45:14 字數 658 閱讀 1367

#  vim hello.c

#include

intmain()

gcc -o hello hello.c

# gcc編譯器驅動程式讀取hello.c,

#將其翻譯成可執行的目標檔案 hello

預處理階段:

hello.c 通過 cpp 改寫為 hello.i ,將標頭檔案 #include

引入程式當中。

編譯階段:

將 hello.i 檔案改寫為彙編 hello.s

彙編階段:

將 hello.s 翻譯成 機器語言 hello.o

重定位目標檔案是彙編器 使用編譯器輸出的組合語言輸出的二進位制目標檔案, 要知道目標檔案使用的是相對物理(記憶體)位址,重定位的目的就是變相對實體地址到絕對實體地址。

鏈結階段:

這是一種節約記憶體的程式設計機制,有兩種方法實現,一種是靜態另一種就是動態(dll)。

一些通用的函式(如 printf )是系統自帶的,如果某段程式需要呼叫則直接從系統拿即可。

總結:編譯—》執行

就是將乙個程式翻譯成不同程式表現的過程。

c 語言 -> 彙編 -> 機器語言

ps: 反彙編

機器語言 -> 彙編

從編譯器角度看 lambda表示式

lambda轉換為函式物件。現在,android已經全面轉向c 11 14標準了,看 的話,很多地方變化很大,新標準真的是有點顛覆性的,感覺已經不會c 了。今天有看到lambda表示式,突然想看一下,這貨是怎麼實現的,如下,寫了個例子,分別呼叫3個lambda表示式 include include ...

昂首闊步 從BC編譯器走向VC編譯器

昂首闊步 從bc編譯器走向vc編譯器 當我們的專案通過編譯器時 我們總覺得是這麼神奇.當我們的專案在乙個編譯器中執行 而在另乙個編譯器中被否定時 我們總是這麼困惑.面對幕布罩蓋的編譯器中的規律 我們更感到神秘.這裡 我用乙個簡單的方法來掀開這神密幕布的一角.同時 也為乙個程式從bc5編譯器昂首闊步走...

編譯器角度看C 複製建構函式

關於複製建構函式的簡單介紹,可以看我以前寫過的一篇文章 複製控制之複製建構函式該文章中介紹了複製建構函式的定義 呼叫時機 也對編譯器合成的複製建構函式行為做了簡單說明。本文因需要會涉及到上文的一些知識點,但還是推薦先閱讀上文。本文主要從編譯器角度對複製建構函式進行分析,糾正以前對複製建構函式的一些錯...