你是否有過這樣的經(jīng)歷,在配置不是很好的機(jī)器上運(yùn)行一些不是很完善的Windows 應(yīng)用程序,系統(tǒng)速度越來越慢,直至彈出一個(gè)警告對(duì)話框,系統(tǒng)資源嚴(yán)重不足請(qǐng)關(guān)閉部分Windows 應(yīng)用程序,這往往是靜態(tài)鏈接的緣故。使用普通的函數(shù)庫,在程序鏈接時(shí)將庫中的代碼拷貝到可執(zhí)行文件中這叫作靜態(tài)鏈接。假設(shè)有多個(gè)程序同時(shí)執(zhí)行并且都調(diào)用了同一個(gè)動(dòng)態(tài)鏈接庫,這時(shí)內(nèi)存中就會(huì)保留許多重復(fù)的代碼副本。
使用動(dòng)態(tài)鏈接庫則不一樣,只有程序在執(zhí)行時(shí)才將庫代碼裝入內(nèi)存,對(duì)于同一個(gè)動(dòng)態(tài)鏈接庫無論有多少個(gè)應(yīng)用程序同時(shí)在使用它,內(nèi)存中都只有一個(gè)動(dòng)態(tài)鏈接庫的副本。如果動(dòng)態(tài)鏈接庫不再被任何程序使用,系統(tǒng)就將它調(diào)出內(nèi)存,這就減少了應(yīng)用程序?qū)?nèi)存的要求。
動(dòng)態(tài)鏈接庫是一種程序模塊,它不僅可以包含可執(zhí)行代碼,而且通常還包含了各種類型的預(yù)定義的數(shù)據(jù)和資源,擴(kuò)大了庫文件的使用范圍。Windows 操作系統(tǒng)使用了許多動(dòng)態(tài)鏈接庫,比如我們使用Visual C++建立MFC 應(yīng)用程序時(shí),如果在AppWizard向?qū)е羞x擇了使用MFC 作為動(dòng)態(tài)鏈接庫,那么所有這種類型的程序至少都共用了C:/Windows/System 目錄下的MFC 動(dòng)態(tài)鏈接庫文件Msvcrt.dll 和Mfc42.dll ,許多設(shè)備的驅(qū)動(dòng)程序也是用動(dòng)態(tài)鏈接庫實(shí)現(xiàn)的,擴(kuò)展名一般為.drv。動(dòng)態(tài)鏈接庫技術(shù)常常用于開發(fā)大型軟件系統(tǒng),一個(gè)大型系統(tǒng)如果只通過一個(gè)可執(zhí)行文件來完成那程序就太龐大了,而且可能有許多重復(fù)的功能,這時(shí)如果將程序分解由一系列主程序和動(dòng)態(tài)鏈接庫組成,這就減少了開發(fā)難度和工作量,提高了訪問的速度,更有利于對(duì)整個(gè)系統(tǒng)的管理。
動(dòng)態(tài)鏈接庫的另一個(gè)用途是,軟件產(chǎn)品國際化開發(fā)人員可以將依賴于各國語言的資源分離開來各自放進(jìn)專門的動(dòng)態(tài)鏈接庫中,各國不同的用戶可以在安裝和運(yùn)行時(shí)選擇適當(dāng)語言版本的動(dòng)態(tài)鏈接庫,這樣主程序不用改變就可以用于全球范圍。這是實(shí)現(xiàn)軟件國際化的一項(xiàng)技術(shù),知道了動(dòng)態(tài)鏈接庫的這些特點(diǎn),相信讀者不難明白為什么動(dòng)態(tài)鏈接庫的應(yīng)用那么廣泛了。
新聞熱點(diǎn)
疑難解答