可執行檔案(目標檔案)的格式:
在 windows 下都按照 pe-coff 格式儲存,linux 下按照 elf 格式儲存。
程式源**被編譯後主要分為兩種段:程式指令和程式資料。
**段屬於程式指令,而資料段和 .bss 段屬於資料段。
static int x1 = 0;
// x1 為 0,可以認為 x1 未被初始化(預設值為 0),存放在.bss中
// 這樣可以節省空間,因為 .bss 不佔磁碟空間
static int x2 = 1;
// x2 存放在.data中
想要**或者變數放到指定段中,採用:
__attribute__((section("foo"))) int val = 1;
__attribute__((section("bar"))) void fun()
《程式設計師的自我修養 鏈結 裝載與庫》 鏈結
對於平常的應用程式開發,我們很少需要關注編譯和鏈結過程,因為通常的開發環境都是流行的整合開發環境 ide 比如visual studio myeclipse等。這樣的ide一般都將編譯和鏈結的過程一步完成,通常將這種編譯和鏈結合併在一起的過程稱為構建,即使使用命令列來編譯乙個源 檔案,簡單的一句 g...
《程式設計師的自我修養 鏈結 裝載與庫》
先不說別的,就單看書名就知道是什麼意思了。作者的意思是想 演員的自我修養 的作者 斯坦尼斯拉夫斯基 致敬。老斯的那本書我沒看過。但我看這本書的意思就是培養程式設計師的基本素質。你說啥叫基本素質?那就是你能夠了解你編寫的程式的任何乙個執行的細節。就拿乙個簡單的 hello world 來說,它是如何執...
程式設計師的自我修養 鏈結 裝載與庫
第一次接觸 程式設計師的自我修養 的時候,的確懷有一種疑惑的態度的。因為潛意識告訴我 在計算機這一行,更強調的是實踐動手,而 修養的顯然不屬於動手操作類,至少不是太適合我的需求。但是,當我以一種隨意的心態翻閱的時候,我才發現我的判斷是多麼的幼稚!這是一本深入淺出 通俗易懂的權威教材,特別是當我了解到...