動態鏈接

動態鏈接

動態鏈接,在可執行文件裝載時或運行時,由操作系統的裝載程序載入庫。大多數操作系統將解析外部引用(比如庫)作為載入過程的一部分。

使用原因


靜態鏈接使得不同的程序開發者和部門能夠相對獨立地開發和測試自己的程序模塊,從某種意義上來講大大促進了程序的開發效率,原先限制程序的規模也隨之擴大。但是慢慢地靜態鏈接的諸多缺點也逐步暴露出來,比如浪費內存和磁碟空間、模塊更新困難等問題,使得人們不得不尋找一種更好的方式來組織程序的模塊。
要解決空間浪費和更新困難這兩個問題最簡單的辦法就是把程序的模塊相互劃分開來,形成獨立的文件,而不再將他們靜態的鏈接在一起。簡單地講,就是不對那些組成程序的目標文件進行鏈接,等到程序要運行時才進行鏈接。也就是說,把鏈接這個過程推遲到了運行時再進行,這就是動態鏈接(Dynamic Linking)的基本思想。

基本簡介


在這些系統上,可執行文件包含一個叫做import directory的表,該表的每一項包含一個庫的名字。根據表中記錄的名字,裝載程序在硬碟上搜索需要的庫,然後將其載入到內存中預先不確定的位置,之後根據載入庫后確定的庫的地址更新可執行程序。可執行程序根據更新后的庫信息調用庫中的函數或引用庫中的數據。這種類型的動態載入成為裝載時載入,被包括Windows和Linux的大多數系統採用。裝載程序在載入應用軟體時要完成的最複雜的工作之一就是載入時鏈接。其他操作系統可能在運行時解析引用。在這些系統上,可執行程序調用操作系統API,將庫的名字,函數在庫中的編號和函數參數一同傳遞。操作系統負責立即解析然後代表應用調用合適的函數。這種動態鏈接叫做運行時鏈接。因為每個調用都會有系統開銷,運行時鏈接要慢得多,對應用的性能有負面影響。現代操作系統已經很少使用運行時鏈接。
可以動態鏈接的庫,在Windows上是dynamic link library (DLL),在UNIX或Linux上是Shared Library。庫文件是預先編譯鏈接好的可執行文件,存儲在計算機的硬碟上。大多數情況下,同一時間多個應用可以使用一個庫的同一份拷貝,操作系統不需要載入這個庫的多個實例。

技術缺點


動態鏈接的最大缺點是可執行程序依賴分別存儲的庫文件才能正確執行。如果庫文件被刪除了,移動了,重命名了或者被替換為不兼容的版本了,那麼可執行程序就可能工作不正常。這就是常說的DLL-hell。

動態頁面釋義


動態頁面:含有?的,或是以asp,php,jspaspx結尾的都是動態,動態頁面是可以通過網站後台管理系統對網站的內容進行更新管理,動態頁面在伺服器裡面不是真實存在的,訪問動態頁面需要經過資料庫,動態頁面是動態連接,發布公司產品,交流互動,博客,網上調查等,這都是動態網站的一些功能。