1. 程式人生 > >動態連結庫與靜態連結庫的優缺點

動態連結庫與靜態連結庫的優缺點

轉載參考博文
1、靜態連結庫的優點:
(1) 程式碼裝載速度快,執行速度略比動態連結庫快;
(2) 只需保證在開發者的計算機中有正確的.LIB檔案,在以二進位制形式釋出程式時不需考慮在使用者的計算機上.LIB檔案是否存在及版本問題,可避免dll地獄等問題。
2 、動態連結庫的優點 (動態庫最大的好處是什麼,不僅僅是程式碼共享,更重要的是“模組化”。)

(1) 更加節省記憶體並減少頁面交換;

(2) DLL檔案與EXE檔案獨立,只要輸出介面不變(即名稱、引數、返回值型別和呼叫約定不變),更換DLL檔案不會對EXE檔案造成任何影響,因而極大地提高了可維護性和可擴充套件性;

(3) 不同程式語言編寫的程式只要按照函式呼叫約定就可以呼叫同一個DLL函式;

(4)適用於大規模的軟體開發,使開發過程獨立、耦合度小,便於不同開發者和開發組織之間進行開發和測試。

3、不足之處

(1) 使用靜態連結生成的可執行檔案體積較大,包含相同的公共程式碼,造成浪費;

(2) 使用動態連結庫的應用程式不是自完備的,它依賴的DLL模組也要存在,如果使用載入時動態連結,程式啟動時發現DLL不存在,系統將終止程式並給出錯誤資訊。而使用執行時動態連結,系統不會終止,但由於DLL中的匯出函式不可用,程式會載入失敗;速度比靜態連結慢。當某個模組更新後,如果新模組與舊的模組不相容,那麼那些需要該模組才能執行的軟體,統統撕掉。這在早期Windows中很常見。

4、靜態連結的缺點
(1)如果靜態庫中有全域性變數,那麼在幾個模組中使用,將會導致全域性變數有不同的值。
(2)靜態庫編譯時,不會進行連結檢查,在生成靜態庫階段檢查不出來。
(3)幾個模組,引用同一靜態庫,如果有一模組沒有編譯到,會引起巨大的差異導致問題。

5、動態連結的缺點
(1)當系統中多個應用程式都用了一個動態連結庫,但是要求的版本不同,這時動態連結庫之間就會相互干擾,容易出現dll地獄的問題。
(2)效能開銷。動態連結庫為了做到“共享程式碼,但是不共享資料”,引入了不小的開銷,呼叫動態連結庫中的函式,需要好幾次間接記憶體訪問才能走到函式入口,全域性資料也是。