電腦科學中,動態重新編譯(有時縮寫為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"重編譯器[1]
  • Dolphin,任天堂GameCubeWii模擬器,有動態重編譯選項
  • DeSmuME任天堂DS模擬器,有動態重編譯選項[2]

參見

編輯

參考資料

編輯
  1. ^ PCSX2 - Playstation 2 Emulator News. www.pcsx2.net. [2017-02-09]. (原始內容存檔於2005-10-29) (英國英語). 
  2. ^ DeSmuME. desmume.org. [2017-02-09]. (原始內容存檔於2009-02-27) (美國英語). 

外部連結

編輯