什麼是鏈結,為什麼需要鏈結?

2021-10-06 13:22:10 字數 968 閱讀 8993

在實際開發中,我們一定是多檔案程式設計,所有檔案在編譯後,需要合在一起,合在一起的過程就是鏈結的過程。

每乙個原始檔(就是.c檔案,上圖中的程式1)都有對應的零碎檔案(就是.**件),通過預編譯(通過#include實現)把.c和.**件整合成乙個組合c檔案,這個組合c檔案的擴充套件名為.i。把組合c檔案編譯成彙編檔案.s,目標檔案為機器指令(放在乙個.o檔案當中),單個目標檔案是不能工作的,因為各個目標檔案是相互支撐工作的。

把各個目標檔案整合的過程就叫鏈結過程。整合後的檔案就叫可執行程式,windows字尾為.exe,linux字尾為.out

(1)位址重定位:目標檔案被整合的時候,每個目標檔案的資料區被整合到一起,每個目標檔案的指令區被整合到一起。假如目標檔案1被整合前指令的位址是00000001,目標檔案n整合前指令的位址也是00000001,整合到一起後,他們的位址是要重新編排的,這個叫位址重定位。資料區域的位址相應的也要重新編排。

重定位位址的作用:cpu會通過這個重定位的位址進行定址,找到在記憶體中要執行的指令和資料,然後取出指令執行,並按照指令要求處理資料。重定位以後,會給執行檔案中的計算機指令資料,重新安排位址,cpu會通過這些位址取指令執行,並處理這些資料。最終需要通過這些位址找到記憶體中的指令和資料。

(2)符號統一 :直接舉個c語言中的例子,假設程式有兩個.c檔案,分別是a.c和b.c,這兩個檔案中都有名叫var的變數,a.c被編譯得到a.o,b.c被編譯得到b.o,將a.o和b.o鏈結到同乙個檔案時,var命名重複了,需要根據規則對著兩個符號進行統一,與此相似的還有函式名的「符號統一」問題。

什麼是編譯?什麼是鏈結?

1.一般來說,無論是c c 首先要把原始檔編譯成中間 檔案,在windows下也就是 obj 檔案,unix下是 o 檔案,即 object file。2.在編譯時編譯器需要的是語法的正確,函式與變數的宣告的正確。只要所有的語法正確,編譯器就可以編譯出中間目標檔案。一般來說,每個原始檔都應該對應於乙...

什麼是外部鏈結?外部鏈結的作用是什麼?

外部鏈結,又常被稱為 反向鏈結 或 匯入鏈結 是指通過其他 鏈結到你的 的鏈結。如何增加外鏈對乙個 來講非常的重要,可以提高 的權重,獲得好的排名 也可以帶來不錯的流量.因此對乙個站長來講,必須掌握一些如何增加外鏈技巧。下面我們就來談談如何增加外鏈的一些方法和技巧 把 提交給dmoz 開發目錄或其他...

什麼是viewport,為什麼需要viewport

以一代iphone下的safari來說就是 在iphone的320px物理螢幕上 視覺視窗 visual viewport 建立出了乙個980px的虛擬視窗 布局視窗 layout viewport 在視覺視窗 visual viewport 中我們可以拖動橫向豎向滑動條或者放大縮小網頁,來達到最佳...