计算机科学中,动态重新编译(有时缩写为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) (美国英语). 

外部链接

编辑