高階C C 編譯技術之讀書筆記(一)之編譯 鏈結

2022-04-22 14:33:48 字數 1217 閱讀 3076

最近有幸閱讀了《高階c/c++編譯技術》深受啟發,該書深入淺出地講解了構建過程(編譯、鏈結)中的各種細節,從多個角度展示了程式與庫檔案或**的整合方法,提出了面向**復用和系統整合的軟體架構設計方法,以及系統開發過程中疑難問題的解決方案。

以下將回頭記錄下其中的關鍵要點,以便後面查閱。

(1)**節:供cpu執行的機器指令碼(.text節)

(2)資料節:供cpu操作的資料,通常來說,初始化資料(.data)、未初始化資料(.bss)、和唯讀資料(.rdata)會儲存在分量的節中

(3)堆:動態記憶體分配的區域

(4)棧:為各個函式提供獨立的儲存空間

(5)最上層部分屬於核心區域,特定程序的環境變數就存放在該區域

編譯的目的就是將高階語言轉換為機器可以識別和執行的機器語言(彙編或二進位制),主要過程包括:

(1)預處理:將#incldue關鍵字標識的含有定義的檔案包含到源**檔案中、將#define語句指定的值抓換為常量、在**中呼叫巨集的位置將巨集定義轉換為**、根據#if/#elif和#endif指令的位置包含或排除特定部分的**

(2)語言分析:將**轉換為更易於處理的形式(刪除注釋和不必要的空格,以及從文字中提取符號等操作),檢查程式是否滿足程式語言的語法規則。包括詞法、語法和語義分析

(3)彙編階段

(4)優化階段:將程式的暫存器使用率最小化,**出實際上不需要執行的**,並將其刪除

(5)**生成階段

連線過程的輸入是目標檔案的集合,其中由編譯階段預先生成,每個目標檔案可以被看作單個的源**的二進位制儲存版本,需要為程式記憶體對映提供各種各樣的節(**,初始化資料,未初始化資料,除錯資訊等)。聯結器的最終任務是將獨立的節組合成最終的程式記憶體對映節,與此同時解析所有的引用,為不同部分的**間建立關聯,使得程式稱為乙個整體。

(1)重定位:完成記憶體因素各行

(2)解析引用:檢測拼接到程式記憶體對映中的節,找出哪些部分**產生了外部呼叫,計算該引用的精確位址,將機器指令中的偽位址替換成程式記憶體對映的實際位址

高階C C 編譯技術之讀書筆記(四)之定位庫檔案

最近有幸閱讀了 高階c c 編譯技術 深受啟發,該書深入淺出地講解了構建過程 編譯 鏈結 中的各種細節,從多個角度展示了程式與庫檔案或 的整合方法,提出了面向 復用和系統整合的軟體架構設計方法,以及系統開發過程中疑難問題的解決方案。以下將回頭記錄下其中的關鍵要點,以便後面查閱。1 靜態庫 lib a...

高階C C 編譯技術之讀書筆記(二)之庫的概念

最近有幸閱讀了 高階c c 編譯技術 深受啟發,該書深入淺出地講解了構建過程 編譯 鏈結 中的各種細節,從多個角度展示了程式與庫檔案或 的整合方法,提出了面向 復用和系統整合的軟體架構設計方法,以及系統開發過程中疑難問題的解決方案。以下將回頭記錄下其中的關鍵要點,以便後面查閱。首先,需要理解載入域與...

c和指標讀書筆記一之編譯

gcc的編譯流程分為了四個步驟 1.預處理,生成預編譯檔案 檔案 gcc e hello.c o hello.i2.編譯,生成彙編 s檔案 gcc s hello.i o hello.s3.彙編,生成目標檔案 o檔案 gcc c hello.s o hello.o gcc hello.o o hel...