複製鏈接
請複製以下鏈接發送給好友

動態鏈接

鎖定
動態鏈接英文是Dynamic Linking,他是使得不同的程序開發者和部門能夠相對獨立地開發和測試自己的程序模塊,從某種意義上來講大大促進了程序的開發效率,原先限制程序的規模也隨之擴大。但是慢慢地靜態鏈接的諸多缺點也逐步暴露出來,比如浪費內存和磁盤空間模塊更新困難等問題,使得人們不得不尋找一種更好的方式來組織程序的模塊。

動態鏈接定義

動態鏈接英文是Dynamic Linking需要解決空間浪費和更新困難這兩個問題最簡單的辦法就是把程序的模塊相互劃分開來,形成獨立的文件,而不再將他們靜態的鏈接在一起。簡單地講,就是不對那些組成程序的目標文件進行鏈接,等到程序要運行時才進行鏈接。也就是説,把鏈接這個過程推遲到了運行時再進行,這就是動態鏈接(Dynamic Linking)的基本思想。

動態鏈接簡介

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

動態鏈接動態鏈接與靜態鏈接對比

動態鏈接靜態鏈接

優點:
① 代碼裝載速度快,執行速度略比動態鏈接庫快;
② 只需保證在開發者的計算機中有正確的.LIB文件,在以二進制形式發佈程序時不需考慮在用户的計算機上.LIB文件是否存在及版本問題,可避免DLL地獄等問題。
缺點:
使用靜態鏈接生成的可執行文件體積較大,包含相同的公共代碼,造成浪費;

動態鏈接動態鏈接

優點:
①更加節省內存並減少頁面交換;
② DLL文件與EXE文件獨立,只要輸出接口不變(即名稱、參數、返回值類型和調用約定不變),更換DLL文件不會對EXE文件造成任何影響,因而極大地提高了可維護性和可擴展性;
③不同編程語言編寫的程序只要按照函數調用約定就可以調用同一個DLL函數;
④適用於大規模的軟件開發,使開發過程獨立、耦合度小,便於不同開發者和開發組織之間進行開發和測試。
缺點:
使用動態鏈接庫的應用程序不是自完備的,它依賴的DLL模塊也要存在,如果使用載入時動態鏈接,程序啓動時發現DLL不存在,系統將終止程序並給出錯誤信息。而使用運行時動態鏈接,系統不會終止,但由於DLL中的導出函數不可用,程序會加載失敗;速度比靜態鏈接慢。當某個模塊更新後,如果新模塊與舊的模塊不兼容,那麼那些需要該模塊才能運行的軟件,統統撕掉。這在早期Windows中很常見。 [1] 
動態鏈接 動態鏈接
頁面
動態頁面:含有?的,或是以asp,php,jsp,aspx結尾的都是動態,動態頁面是可以通過網站後台管理系統對網站的內容進行更新管理,動態頁面在服務器裏面不是真實存在的,訪問動態頁面需要經過數據庫,動態頁面是動態連接,發佈公司產品,交流互動,博客,網上調查等,這都是動態網站的一些功能。
參考資料