我不宅,我只是不出門

Murmur of a technical dude

動態連結

with 3 comments

最近在看世紀末軟體革命復刻版,但是看到一個地方講到動態連結,怎會扯到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 應該一點關係都沒有。

Written by jclin

2006/07/08 於 3:49 下午

張貼於programming

3 回應

Subscribe to comments with RSS.

  1. 既然都提到了 ABI 與不同 compiler 相容性的問題,難道不算是有關嗎?

    b6s

    2006/07/08 at 4:23 下午

  2. 不過,我倒是同意,在最後拿 DLL 當例子是引喻失義了。

    b6s

    2006/07/08 at 4:33 下午

  3. b6s 兄有額外不同的見解,可否有詳細說明。😛

    jclin

    2006/07/08 at 6:19 下午


發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s

%d 位部落客按了讚: