gravatar

動態連結

最近在看世紀末軟體革命復刻版,但是看到一個地方講到動態連結,怎會扯到DLL(dynamic linking library,動態連結函示庫),蠻怪的。語言的動態連結應該是 dynamic binding or dynamic casting;DLL 反過來看只是一種 library,在執行檔執行時才動態載入記憶體,而其中的 function/API address resolution 也是載入時就去計算記憶體中的位址。實際上他們還是簡單的 function call,只是函數程式碼位於一種外部可執行且獨立載入的格式中。看起來是動態的,因為是 OS 在執行時才動態載入。但是在語言本身看來,應該還是靜態的,因為 function/API 位址已經在執行前就固定了。
題外話,當然 DLL 也可以包含 C++ 物件,所以說在 DLL 中有 C++ 的物件,執行時去做 runtime 的 dynamic binding 也是可以。但是因為不同語言的 ABI (Application Binary Interface) 不同,所以 BC++ 做出來的 C++ DLL 是沒辦法直接給 VC++ 的執行檔使用,反之亦然。所以 MS 才有 COM 這種東西出來解決不同語言之間寫的物件可以互通使用。
不過要說得還是,DLL 的動態連結只是對 OS 和程式載入過程來說是動態載入,跟語言的 dynamic binding 應該一點關係都沒有。

gravatar

一般提到 dynamic binding 的中譯好像都是動態繫結?而不是用動態連結