瞭解動態連結(一)—— 概述,瞭解動態連結概述

來源:互聯網
上載者:User

瞭解動態連結(一)—— 概述,瞭解動態連結概述
一、靜態連結的缺點

1、浪費記憶體和磁碟空間

假設模組 A 和 B 都依賴於 C,採用靜態連結的方式,C 庫被連結到 A 和 B,這樣無論是儲存在磁碟還是在記憶體運行時,模組 C 都有2個副本。

2、程式維護麻煩

假設程式依賴很多庫,其中任意一個修改了 bug 或進行了更新,都需要重新連結,重新發布。

二、動態連結 (Dynamic Linking)

把連結過程延遲到運行時再進行。

假設模組 A 和 B 都依賴於 C,採用動態連結的方式,在運行時,模組 C 在記憶體中只有一份,由 A 和 B 共用,在磁碟中也只有一份獨立的 C 共用庫即可。

採用動態連結,解決了上面提到的靜態連結的兩個缺點。

動態連結的過程大致是先遞迴的將依賴庫載入到記憶體,然後進行符號解析和地址重定位,最後執行進入點程式。

三、動態連結不代表十全十美

1、共用庫的版本控制問題

動態連結的基本思想是將程式拆分為各個相對獨立的模組。一個常見的問題是,當程式所依賴的某個模組更新後,由於新舊模組的介面不相容,導致原有的一些程式無法運行。

2、效能損耗

採用動態連結,程式每次運行時都要重新進行連結,這樣會導致一些效能損耗。使用延遲綁定 (Lazy Binding) 可以盡量減小這種效能損耗。

四、如何快速瞭解動態連結的整個過程

最快的學習方式是看代碼,比如通讀 Android 系統的 Linker 代碼。整個 Linker 的代碼量不是很大,但前提要對 ELF 格式有一定的理解。

學習資料: 《程式員的自我修養——連結、裝載和庫》

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.