Skip to content

Latest commit

 

History

History
39 lines (20 loc) · 1.47 KB

Linking 5c21a4549b98473fae98afe3a82d8685.md

File metadata and controls

39 lines (20 loc) · 1.47 KB

Linking

linking 指的是 function 去 call 你要的 library。

Static Linking

link 完library就放進去了。

優點: execution 時比較快。

問題:整個 memory 都被 library佔滿了。

dynamic loading 沒辦法解決問題。

解決方式: dynamic linking

dynamic linking

Runtime 的 linking。

一開始,整支程式 load 到 memory 裡面時,只有main program而已。當需要用到 library時,因為library是不能被修改的,而且可以被多個 program 共用,所以其實只需要放一份,讓大家來 share。 Runtime 再去找。

例如: printf 這個 funciton,

第一個 program 要用到,於是 load 了這個 library 進來。

第二個 program 也要用到,就先去找是否已經 load進來了,如果有,就直接用。沒有的話,再 copy進來。

如此一來就能確保只有一份library,不會重複佔用空間。

在 windows裡面的 DLL 就是 dynamic link library。

在 compile 下 link 的時候,也要給他一個 flag 告訴他這是哪一種 linking。

Linking%205c21a4549b98473fae98afe3a82d8685/_2020-05-18_11.29.58.png

stub : 轉換, 查找的小程式,會問 OS 有沒有 load 這個 library。

缺點:因為多了 stub ,代表 runtime 時才會 call syscall 去查找,會比較慢一點。 OS 會需要 support。(所以比較簡單的OS, 例如 embedded system 可能就不支援 dynamic linking)