版權(quán)歸原作者所有,如有侵權(quán),請聯(lián)系我們

[科普中國]-動態(tài)重編譯

科學(xué)百科
原創(chuàng)
科學(xué)百科為用戶提供權(quán)威科普內(nèi)容,打造知識科普陣地
收藏

在計(jì)算機(jī)科學(xué)中,動態(tài)重新編譯(有時縮寫為dynarec或偽首字母縮寫DRC)是某些模擬器和虛擬機(jī)的功能。在執(zhí)行期間,系統(tǒng)會重新編譯程序的一些部分,調(diào)整生成的代碼,使其表現(xiàn)程序的運(yùn)行時環(huán)境,并有可能利用那些傳統(tǒng)靜態(tài)編譯器不能獲得的信息,生成更高效的代碼。

用途大多數(shù)動態(tài)重編譯器用于在執(zhí)行時不同架構(gòu)間轉(zhuǎn)換機(jī)器碼。這是一個在模擬傳統(tǒng)游戲平臺中往往需要執(zhí)行的任務(wù)。在其他情況下,系統(tǒng)可采取動態(tài)重編譯作為自適應(yīng)優(yōu)化的一部分,以執(zhí)行可移植程序,如Java與 .NET通用語言運(yùn)行庫字節(jié)碼。全速調(diào)試器還使用動態(tài)重編譯來減少大多數(shù)逆優(yōu)化技術(shù)中產(chǎn)生的空間開銷,并實(shí)現(xiàn)其他功能,例如動態(tài)線程遷移。1

任務(wù)動態(tài)重編譯執(zhí)行的主要任務(wù):

從源平臺讀入機(jī)器碼

為目標(biāo)平臺釋放機(jī)器碼

動態(tài)重編譯也可以執(zhí)行一些輔助任務(wù):

管理重編譯代碼的緩存

在具有循環(huán)計(jì)數(shù)寄存器的平臺上更新已循環(huán)計(jì)數(shù)

中斷檢查管理

為支持虛擬化的硬件提供接口,例如GPU

優(yōu)化更高級別的代碼結(jié)構(gòu),以便在目標(biāo)硬件上高效運(yùn)行1

應(yīng)用通用動態(tài)重編譯為許多Java虛擬機(jī)的特色

在x86平臺上蘋果Mac OS X的Rosetta,允許PowerPC代碼在x86架構(gòu)上運(yùn)行

在PowerPCClassic Mac OS平臺上運(yùn)行摩托羅拉68000系列代碼的Mac 68k模擬器

Psyco,Python的一個專有編譯器

Mac上的Microsoft Virtual PC,用于在PowerPC架構(gòu)上運(yùn)行x86代碼

QEMU,一個開源的全系統(tǒng)模擬器

VirtualBox使用動態(tài)重編譯

Valgrind,是一種用于內(nèi)存調(diào)試、內(nèi)存泄漏檢測和性能分析的編程工具,它使用動態(tài)重新編譯1

游戲MAME在其CPU模擬器中使用動態(tài)重編譯,支持MIPS、SuperH、PowerPC,甚至是Voodoo GPU

Xbox 360的向后兼容性功能(即運(yùn)行為初版Xbox編寫的游戲),人們普遍認(rèn)為其使用動態(tài)重編譯

PPSSPP,索尼PlayStation Portable模擬器,其在x86與ARM平臺上都有重編譯器

PCSX2,索尼PlayStation 2模擬器,擁有"SuperVU"的繼任者——"microVU"重編譯器

Dolphin,任天堂GameCube與Wii模擬器,有動態(tài)重編譯選項(xiàng)

DeSmuME,任天堂DS模擬器,有動態(tài)重編譯選項(xiàng)1

即時編譯即時編譯(英語:Just-in-time compilation),又譯及時編譯、實(shí)時編譯,動態(tài)編譯的一種形式,是一種提高程序運(yùn)行效率的方法。通常,程序有兩種運(yùn)行方式:靜態(tài)編譯與動態(tài)解釋。靜態(tài)編譯的程序在執(zhí)行前全部被翻譯為機(jī)器碼,而解釋執(zhí)行的則是一句一句邊運(yùn)行邊翻譯。

即時編譯器則混合了這二者,一句一句編譯源代碼,但是會將翻譯過的代碼緩存起來以降低性能損耗。相對于靜態(tài)編譯代碼,即時編譯的代碼可以處理延遲綁定并增強(qiáng)安全性。

即時編譯器有兩種類型,一是字節(jié)碼翻譯,二是動態(tài)編譯翻譯。

微軟的.NET Framework,還有絕大多數(shù)的Java實(shí)現(xiàn),都依賴即時編譯以提供高速的代碼執(zhí)行。Mozilla Firefox使用的JavaScript引擎SpiderMonkey也用到了JIT的技術(shù)。Ruby的第三方實(shí)現(xiàn)Rubinius和Python的第三方實(shí)現(xiàn)PyPy也都通過JIT來明顯改善了解釋器的性能。2

本詞條內(nèi)容貢獻(xiàn)者為:

王慧維 - 副研究員 - 西南大學(xué)