1 靜態連接庫的優勢 編程
(1) 代碼裝載速度快,執行速度略比動態連接庫快; 編程語言
(2) 只需保證在開發者的計算機中有正確的.LIB文件,在以二進制形式發佈程序時不需考慮在用戶的計算機上.LIB文件是否存在及版本問題,可避免DLL地獄等問題。 ide
2 動態連接庫的優勢 函數
(1) 更加節省內存並減小頁面交換;測試
(2) DLL文件與EXE文件獨立,只要輸出接口不變(即名稱、參數、返回值類型和調用約定不變),更換DLL文件不會對EXE文件形成任何影響,於是極大地提升了可維護性和可擴展性;spa
(3) 不一樣編程語言編寫的程序只要按照函數調用約定就能夠調用同一個DLL函數;orm
(4)適用於大規模的軟件開發,使開發過程獨立、耦合度小,便於不一樣開發者和開發組織之間進行開發和測試。接口
3 不足之處內存
(1) 使用靜態連接生成的可執行文件體積較大,包含相同的公共代碼,形成浪費;開發
(2) 使用動態連接庫的應用程序不是自完備的,它依賴的DLL模塊也要存在,若是使用載入時動態連接,程序啓動時發現DLL不存在,系統將終止程序並給出錯誤信息。而使用運行時動態連接,系統不會終止,但因爲DLL中的導出函數不可用,程序會加載失敗;速度比靜態連接慢。當某個模塊更新後,若是新模塊與舊的模塊不兼容,那麼那些須要該模塊才能運行的軟件,通通撕掉。這在早期Windows中很常見。
還有一點區別:
靜態庫在程序編譯時會被鏈接到目標代碼中,程序運行時將再也不須要該靜態庫。
動態庫在程序編譯時並不會被鏈接到目標代碼中,而是在程序運行是才被載入,所以在程序運行時還須要動態庫存在。
靜態庫是指編譯連接時,把庫文件的代碼所有
加載到可執行文件中,所以生成的文件比較大,但在運行時也就再也不須要庫文件了。其後
綴名通常爲「.a」 。 動態庫與之相反,在編譯連接時並無把庫文件的代碼加載到可執行
文件中,而是在程序執行時由運行時連接文件加載庫,這樣能夠節省系統的開銷。