靜態鏈接和動態鏈接的優缺點

靜態鏈接庫的優點

  • 代碼裝載速度快,執行速度略比動態鏈接庫快;
  • 只需保證在開發者的計算機中有正確的.LIB文件,在以二進制形式發佈程序時不需考慮在用戶的計算機上.LIB文件是否存在及版本問題,可避免DLL地獄等問題。

動態鏈接庫的優點

  • 更加節省內存並減少頁面交換

頁面交換:Y個程序中使用了相同的代碼(假設這部分代碼佔用X個內存頁),如果使用的是靜態鏈接,這些相同的代碼在各程序運行時必須重新加載到內存,那麼Y個程序加載這部分代碼會至少造成 YX 次缺頁。如果使用的是動態鏈接庫,運行這些程序時,這個動態鏈接庫可能只需要被加載到內存一次,最少可能只造成 X 次缺頁。當然肯定和內存的實際使用情況有關,這只是假設內存足夠的情況下。

  • DLL文件與EXE文件獨立,只要輸出接口不變(即名稱、參數、返回值類型和調用約定不變),更換DLL文件不會對EXE文件造成任何影響,因而極大地提高了可維護性和可擴展性;

  • 不同編程語言編寫的程序只要按照函數調用約定就可以調用同一個DLL函數;

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

不足之處

  • 使用靜態鏈接生成的可執行文件體積較大,包含相同的公共代碼,造成浪費;

  • 使用動態鏈接庫的應用程序不是自完備的,它依賴的DLL模塊也要存在,如果使用載入時動態鏈接,程序啓動時發現DLL不存在,系統將終止程序並給出錯誤信息。而使用運行時動態鏈接,系統不會終止,但由於DLL中的導出函數不可用,程序會加載失敗;速度比靜態鏈接慢。當某個模塊更新後,如果新模塊與舊的模塊不兼容,那麼那些需要該模塊才能運行的軟件,統統撕掉。這在早期Windows中很常見。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章