我寫了一個Brainfuck實現(C++),其工作原理是這樣:使JIT編譯器
- 讀取輸入brainfuck文件
- 做瑣碎的優化
- 轉換brainfuck成機器代碼的VM
- 在VM中執行此機器代碼
這很快,但瓶頸現在在虛擬機上。它是用C++編寫的,讀取一個令牌,執行一個動作(如果你知道Brainfuck,這個動作根本不是很多)等等。
我想要做的是剝離虛擬機並生成本地機器代碼(基本上,JIT編譯器)。這很容易成爲20倍的加速。
這意味着步驟3被JIT編譯器替換,步驟4替換執行生成的機器代碼。
我真的不知道從哪裏開始,所以我有幾個問題:
- 這是如何工作,如何生成的機器代碼得到執行?
- 是否有任何C++庫用於生成本機機器碼?
+1並且被接受爲唯一解釋機器代碼如何被調用的人。 – orlp 2011-05-16 22:15:33