本頁使用了標題或全文手工轉換

動態裝載

維基百科,自由的百科全書
前往: 導覽搜尋

動態裝載英語:Dynamic Loading)是一種程式運行機制,能讓電腦程式在運行時(而不是編譯時)裝載(或者其他二進制對象)到內存中,然後檢索庫中函式變量的位址,並執行這些函式或存取這些變量,且能在不需要時將庫從內存中移除。動態裝載、靜態鏈接動態鏈接(注意區分動態裝載與動態鏈接的微妙差別)是複用其他軟體代碼的三種機制,不同於靜態鏈接和動態鏈接,這種機制允許電腦程式在沒有某些庫的情況下啟動,然後在運行的過程中發現可用的庫從而獲得額外的功能。

歷史沿革[編輯]

動態裝載早在1960年代的IBM/360操作系統中就已經廣泛使用,尤其是在輸入/輸出子模塊,以及COBOLPL/I運行時庫中。裝載的過程對於應用程式開發者是透明的,主要由操作系統或者輸入輸出子系統自動處理。這樣做的好處有:

  • 修復子系統漏洞時只需要打一次補丁即可,而不需要重新鏈接
  • 程式庫可以免於被胡亂修改而造成嚴重影響

IBM於1970年代開發的戰略性事務處理操作系統CICS中,不僅在普通應用程式級別上使用了動態加載,甚至在內核級別都廣泛採取這種機制,這使得用戶可以在不用重啟CICS操作系統的前提下,就可以對應用程式做任何級別的漏洞修復。

用法[編輯]

並非所有作業系統都支援動態裝載。類UNIX作業系統通過C編程語言實作而成的dl庫提供該類功能。在微軟視窗作業系統採用Windows應用程式介面。

類UNIX系統[1][2] 視窗系統
申明 dlfcn.h windows.h
定義 libdl kernel32.dll
裝載庫 dlopen LoadLibrary
LoadLibraryEx
解析庫 dlsym GetProcAddress
移除庫 dlclose FreeLibrary

參考資料[編輯]

  1. ^ dlfcn.h. The IEEE and The Open Group. [2013-12-15] (英語). 
  2. ^ David A. Wheeler. Program Library HOWTO. The Linux Documentation Project. 2003-04-11 [2013-12-15] (英語).