溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

動(dòng)態(tài)鏈接庫(kù)與靜態(tài)鏈接庫(kù)

發(fā)布時(shí)間:2020-07-19 13:27:33 來(lái)源:網(wǎng)絡(luò) 閱讀:223 作者:xiexiankun 欄目:編程語(yǔ)言

1 靜態(tài)鏈接庫(kù)的優(yōu)點(diǎn) 

 (1) 代碼裝載速度快,執(zhí)行速度略比動(dòng)態(tài)鏈接庫(kù)快; 

 (2) 只需保證在開(kāi)發(fā)者的計(jì)算機(jī)中有正確的.LIB文件,在以二進(jìn)制形式發(fā)布程序時(shí)不需考慮在用戶的計(jì)算機(jī)上.LIB文件是否存在及版本問(wèn)題,可避免DLL地獄等問(wèn)題。 

2 動(dòng)態(tài)鏈接庫(kù)的優(yōu)點(diǎn) 

 (1) 更加節(jié)省內(nèi)存并減少頁(yè)面交換;

 (2) DLL文件與EXE文件獨(dú)立,只要輸出接口不變(即名稱、參數(shù)、返回值類型和調(diào)用約定不變),更換DLL文件不會(huì)對(duì)EXE文件造成任何影響,因而極大地提高了可維護(hù)性和可擴(kuò)展性;

 (3) 不同編程語(yǔ)言編寫的程序只要按照函數(shù)調(diào)用約定就可以調(diào)用同一個(gè)DLL函數(shù);

 (4)適用于大規(guī)模的軟件開(kāi)發(fā),使開(kāi)發(fā)過(guò)程獨(dú)立、耦合度小,便于不同開(kāi)發(fā)者和開(kāi)發(fā)組織之間進(jìn)行開(kāi)發(fā)和測(cè)試。

3 不足之處

 (1) 使用靜態(tài)鏈接生成的可執(zhí)行文件體積較大,包含相同的公共代碼,造成浪費(fèi);

 (2) 使用動(dòng)態(tài)鏈接庫(kù)的應(yīng)用程序不是自完備的,它依賴的DLL模塊也要存在,如果使用載入時(shí)動(dòng)態(tài)鏈接,程序啟動(dòng)時(shí)發(fā)現(xiàn)DLL不存在,系統(tǒng)將終止程序并給出錯(cuò)誤信息。而使用運(yùn)行時(shí)動(dòng)態(tài)鏈接,系統(tǒng)不會(huì)終止,但由于DLL中的導(dǎo)出函數(shù)不可用,程序會(huì)加載失?。凰俣缺褥o態(tài)鏈接慢。當(dāng)某個(gè)模塊更新后,如果新模塊與舊的模塊不兼容,那么那些需要該模塊才能運(yùn)行的軟件,統(tǒng)統(tǒng)撕掉。這在早期Windows中很常見(jiàn)。

還有一點(diǎn)區(qū)別:

靜態(tài)庫(kù)在程序編譯時(shí)會(huì)被連接到目標(biāo)代碼中,程序運(yùn)行時(shí)將不再需要該靜態(tài)庫(kù)。

動(dòng)態(tài)庫(kù)在程序編譯時(shí)并不會(huì)被連接到目標(biāo)代碼中,而是在程序運(yùn)行是才被載入,因此在程序運(yùn)行時(shí)還需要?jiǎng)討B(tài)庫(kù)存在。


靜態(tài)庫(kù)是指編譯鏈接時(shí),把庫(kù)文件的代碼全部

加載到可執(zhí)行文件中,因此生成的文件比較大,但在運(yùn)行時(shí)也就不再需要庫(kù)文件了。其后

綴名一般為“.a” 。 動(dòng)態(tài)庫(kù)與之相反,在編譯鏈接時(shí)并沒(méi)有把庫(kù)文件的代碼加載到可執(zhí)行

文件中,而是在程序執(zhí)行時(shí)由運(yùn)行時(shí)鏈接文件加載庫(kù),這樣可以節(jié)省系統(tǒng)的開(kāi)銷。


向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI