鏈結是將各種**和資料片段收集並組合為乙個單一檔案的過程。
這個檔案可以被載入到記憶體並執行。
鏈結可以執行於編譯時,也可以執行於載入時,甚至執行於執行時。在早期的計算機系統中,鏈結是手動執行的。
在現代系統中,鏈結是由叫做鏈結器的程式自動執行的。
像linuxld程式這樣的靜態鏈結器,以一組可重定位目標檔案和命令列引數作為輸入,生成乙個完全鏈結的,可以載入和執行的可執行目標檔案作為輸出.
輸出的可重定位目標檔案由各種不同的**和資料節組成,每一節都是乙個連續的位元組序列,指令在一節中,初始化了的全域性變數在另一節中,而未初始化的全域性變數又在另外一節中。
目標檔案定義和引用符號。每個符號對應於乙個函式,乙個全域性變數或乙個靜態變數。
符號解析的目的是將每個符號引用
正好和乙個符號定義關聯起來。
編譯器和彙編器生成動位址0開始的**和資料節。鏈結器通過把每個符號定義與乙個記憶體位置關聯起來。從而重定位這些節。然後修改所有對這些符號的引用,使它們指向這個記憶體位置。鏈結器使用彙編器產生的重定位條目的詳細指令,不加甄別地執行這樣的重定位。
目標檔案:純粹是位元組塊的集合。這些塊中,有些包含程式**,有些包含程式資料**,而其它的則包含引導鏈結器和載入器的資料結構,鏈結器將這些塊連線起來,確定被連線塊執行的位置,並且修改**和資料塊中的各種位置。
目標檔案有三種形式:
可重定位的目標檔案:包含二進位制**和資料,其形式可以在編譯時與其它可重定位的目標檔案合併起來,建立乙個可執行目標檔案。
可執行目標檔案:包含二進位制**和資料。其形式可以被直接複製到記憶體並執行。
目標檔案是按照特定的目標檔案格式來組織的,各個系統的目標檔案格式都不相同,mac os-x使用mach-o格式。
深入理解計算機系統
關鍵路徑是在迴圈的反覆執行中形成的資料相關鏈。迴圈展開是一種程式變換,通過增加每次迭代計算的元素的數量,減少迴圈的迭代次數。重新結合變換能夠減少計算中關鍵路徑上操作的數量,通過更好地利用功能單元的流水線能力得到更好的效能。浮點運算不保證是可結合的,通常迴圈展開和並行地累積在多個值中,是提高程式效能的...
《深入理解計算機系統》
知乎 深入理解計算機系統 這本書需要什麼水平能看懂?15 213 18 218 15 513 introduction to computer systems schedule fall 2016 鏈結失效則 cmu15 213的課程主頁,有ppt,還有錄影,主講人就是這本書的作者。備註 備註 詳細...
深入理解計算機系統
系統的硬體組成 快取記憶體 作業系統管理硬體 程序虛擬記憶體 檔案amdahl定律 併發和並行 0和1組成的位序列,又稱為位元序列,8個位被組織成一組,成為位元組。每個位元組表示程式中的某些文字字元。系統中的所有資訊 包括磁碟檔案 記憶體中的程式 記憶體中存放的的使用者資料以及網路上傳送的資料,都是...