動態重編譯

計算機科學中,動態重新編譯(有時縮寫為dynarec或偽首字母縮寫DRC)是某些模擬器虛擬機的功能。在執行期間,系統會重新編譯程式的一些部分,調整生成的代碼,使其表現程式的運行時環境,並有可能利用那些傳統靜態編譯器不能獲得的信息,生成更高效的代碼。

基本介紹

  • 中文名:動態重編譯
  • 用途:執行時不同架構間轉換機器碼
  • 領域:計算機
用途,任務,套用,通用,遊戲,即時編譯,

用途

大多數動態重編譯器用於在執行時不同架構間轉換機器碼。這是一個在模擬傳統遊戲平台中往往需要執行的任務。在其他情況下,系統可採取動態重編譯作為自適應最佳化的一部分,以執行可移植程式,如Java與 .NET通用語言運行庫位元組碼。全速調試器還使用動態重編譯來減少大多數逆最佳化技術中產生的空間開銷,並實現其他功能,例如動態執行緒遷移。

任務

動態重編譯執行的主要任務:
  • 從源平台讀入機器碼
  • 為目標平台釋放機器碼
動態重編譯也可以執行一些輔助任務:
  • 管理重編譯代碼的快取
  • 在具有循環計數暫存器的平台上更新已循環計數
  • 中斷檢查管理
  • 為支持虛擬化的硬體提供接口,例如GPU
  • 最佳化更高級別的代碼結構,以便在目標硬體上高效運行

套用

通用

遊戲

  • MAME在其CPU模擬器中使用動態重編譯,支持MIPS、SuperH、PowerPC,甚至是Voodoo GPU
  • Xbox 360的向後兼容性功能(即運行為初版Xbox編寫的遊戲),人們普遍認為其使用動態重編譯
  • PPSSPP,索尼PlayStation Portable模擬器,其在x86與ARM平台上都有重編譯器
  • PCSX2,索尼PlayStation 2模擬器,擁有"SuperVU"的繼任者——"microVU"重編譯器
  • Dolphin,任天堂GameCubeWii模擬器,有動態重編譯選項
  • DeSmuME任天堂DS模擬器,有動態重編譯選項

即時編譯

即時編譯(英語:Just-in-time compilation),又譯及時編譯實時編譯動態編譯的一種形式,是一種提高程式運行效率的方法。通常,程式有兩種運行方式:靜態編譯與動態解釋。靜態編譯的程式在執行前全部被翻譯為機器碼,而解釋執行的則是一句一句邊運行邊翻譯。
即時編譯器則混合了這二者,一句一句編譯原始碼,但是會將翻譯過的代碼快取起來以降低性能損耗。相對於靜態編譯代碼,即時編譯的代碼可以處理延遲綁定並增強安全性。
即時編譯器有兩種類型,一是位元組碼翻譯,二是動態編譯翻譯。
微軟的.NET Framework,還有絕大多數的Java實現,都依賴即時編譯以提供高速的代碼執行。Mozilla Firefox使用的JavaScript引擎SpiderMonkey也用到了JIT的技術。Ruby的第三方實現RubiniusPython的第三方實現PyPy也都通過JIT來明顯改善了解釋器的性能。

相關詞條

熱門詞條

聯絡我們