動(dòng)態(tài)鏈接庫(kù)是應(yīng)用程序的一個(gè)模塊,這個(gè)模塊用于導(dǎo)出一些函數(shù)和數(shù)據(jù)供程序中的其他模塊使用。應(yīng)該從一下3個(gè)方面來(lái)理解這個(gè)概念:
1、動(dòng)態(tài)鏈接庫(kù)是應(yīng)用程序的一部分,他的任何操作都是代表應(yīng)用程序進(jìn)行的。所以動(dòng)態(tài)鏈接庫(kù)在本質(zhì)上與可執(zhí)行文件沒(méi)有區(qū)別,都是作為模塊被進(jìn)程加載道自己的地址空間的。
2、動(dòng)態(tài)鏈接庫(kù)在程序編譯時(shí)并不會(huì)被插入到可執(zhí)行文件中,在程序運(yùn)行時(shí)整個(gè)庫(kù)的代碼才會(huì)調(diào)入內(nèi)存,這就是所謂的“動(dòng)態(tài)鏈接”。
3、如果有多個(gè)程序用到同一個(gè)動(dòng)態(tài)鏈接庫(kù),windows在物理內(nèi)存中只保留一份庫(kù)的代碼,僅通過(guò)分頁(yè)機(jī)制將這份代碼映射到不同的進(jìn)程中。這樣,不管有多少程序同時(shí)使用一個(gè)庫(kù),庫(kù)代碼實(shí)際占用的物理內(nèi)存永遠(yuǎn)只有一份。
動(dòng)態(tài)鏈接庫(kù)的縮寫是DLL,大部分動(dòng)態(tài)鏈接庫(kù)鏡像文件的擴(kuò)展名為dll,但擴(kuò)展名為其他的文件也有可能是動(dòng)態(tài)鏈接庫(kù),如系統(tǒng)中的某些exe文件,各種控件(*.ocx),等都是動(dòng)態(tài)鏈接庫(kù)。