linking 指的是 function 去 call 你要的 library。
link 完library就放進去了。
優點: execution 時比較快。
問題:整個 memory 都被 library佔滿了。
dynamic loading 沒辦法解決問題。
解決方式: 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。
stub
: 轉換, 查找的小程式,會問 OS 有沒有 load 這個 library。
缺點:因為多了 stub
,代表 runtime 時才會 call syscall 去查找,會比較慢一點。 OS 會需要 support。(所以比較簡單的OS, 例如 embedded system 可能就不支援 dynamic linking)