靜態(tài)編譯、動態(tài)編譯、靜態(tài)鏈接、動態(tài)鏈接

1、靜態(tài)編譯:

靜態(tài)編譯就是編譯器在編譯可執(zhí)行文件時,將可執(zhí)行文件需要調(diào)用的部分從對于動態(tài)庫中提取出來,鏈接到可執(zhí)行文件中去,使可執(zhí)行文件在運行時不依賴與動態(tài)鏈接庫。

2、動態(tài)編譯

動態(tài)編譯的可執(zhí)行文件需要附帶一個動態(tài)鏈接庫。在執(zhí)行時,需要調(diào)用其動態(tài)鏈接庫中的命令。

優(yōu)點在于:縮小了執(zhí)行文件的體積,另一方面是加快了編譯速度,節(jié)省了系統(tǒng)資源。缺點在于:哪怕是只調(diào)用了動態(tài)鏈接庫中的一兩個命令,也需要附帶相對龐大的鏈接庫;如果計算機上沒有安裝相應(yīng)的動態(tài)鏈接庫,則動態(tài)編譯的可執(zhí)行文件就不能運行。

3、靜態(tài)鏈接

靜態(tài)鏈接時指把要調(diào)用的函數(shù)或過程直接鏈接到可執(zhí)行文件中,稱為可執(zhí)行文件中一部分??蓤?zhí)行文件中包含所有需要的代碼。

缺點在于當(dāng)多個程序都調(diào)用相同函數(shù)時,內(nèi)存就會存在這個函數(shù)的多個拷貝,這樣就浪費了內(nèi)存資源。

5、動態(tài)鏈接

動態(tài)鏈接是相對靜態(tài)鏈接而言的,動態(tài)鏈接所調(diào)用的函數(shù)代碼并沒有拷貝到應(yīng)用程序的可執(zhí)行文件中去,而僅僅是在其中加入了所調(diào)用函數(shù)的重定位信息。當(dāng)應(yīng)用程序被調(diào)入內(nèi)存時,在操作系統(tǒng)的管理下,才在應(yīng)用程序與相應(yīng)的動態(tài)鏈接庫之間建立鏈接關(guān)系。當(dāng)要執(zhí)行動態(tài)鏈接庫中的函數(shù)時,根據(jù)鏈接產(chǎn)生的重定位信息,操作系統(tǒng)才轉(zhuǎn)去執(zhí)行相應(yīng)的函數(shù)代碼。

靜態(tài)鏈接的可執(zhí)行程序能夠在同類操作系統(tǒng)的機器上直接運行。動態(tài)鏈接的可執(zhí)行文件缺少動態(tài)鏈接庫則不可運行。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容