在電腦科學中,動態重新編譯(有時縮寫為dynarec或偽首字母縮寫DRC)是某些模擬器和虛擬機器的功能。在執行期間,系統會重新編譯程式的一些部分,調整生成的代碼,使其表現程式的執行時環境,並有可能利用那些傳統靜態編譯器不能獲得的資訊,生成更高效的代碼。
此條目需要精通或熟悉相關主題的編者參與及協助編輯。 |
用途
大多數動態重編譯器用於在執行時不同架構間轉換機器碼。這是一個在類比傳統遊戲平台中往往需要執行的任務。在其他情況下,系統可採取動態重編譯作為自適應最佳化的一部分,以執行可移植程式,如 Java 與 .NET 通用語言執行庫 位元組碼。全速除錯器還使用動態重編譯來減少大多數逆最佳化技術中產生的空間開銷,並實現其他功能,例如動態執行緒遷移。
任務
動態重編譯執行的主要任務:
- 從源平台讀入機器碼
- 為目標平台釋放機器碼
動態重編譯也可以執行一些輔助任務:
- 管理重編譯代碼的快取
- 在具有迴圈計數暫存器的平台上更新已迴圈計數
- 中斷檢查管理
- 為支援虛擬化的硬體提供介面,例如GPU
- 最佳化更進階別的代碼結構,以便在目標硬體上高效執行(見下文)
實例
應用
- 動態重編譯為許多Java虛擬機器的特色
- 在x86平台上蘋果Mac OS X的Rosetta,允許PowerPC代碼在x86架構上執行
- 在PowerPC Classic Mac OS平台上執行摩托羅拉68000系列代碼的Mac 68k模擬器
- Psyco,Python的一個專有編譯器
- Mac上的Microsoft Virtual PC,用於在PowerPC架構上執行x86代碼
- QEMU,一個開源的全系統模擬器
- VirtualBox使用動態重編譯
- Valgrind,是一種用於主記憶體除錯、記憶體流失檢測和效能分析的編程工具,它使用動態重新編譯
參見
參考資料
外部連結
Wikiwand in your browser!
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.