基於堆棧的字節碼或無限註冊機的優點

compiler-construction expression-trees intermediate-code

編譯器通常選擇基於堆棧或無限寄存器的中間表示(IR)。這些過度表達樹的優點是什麼?

熱門答案

表達式樹適用於表達式,但對整個程序的建模無效。特別是,程序的良好表示實際上是由控制和數據流連接的圖形(操作和動作)。通常人們談論使用形成這種圖形的“三元組”。

堆棧機器代碼很容易生成前端,但生成實際代碼所需的最終寄存器分配過程更難,因為它有一組與目標體系結構沒有任何關係的臨時位置(“堆棧”) ,使數據流不方便處理。 (“哪個代碼使用此添加的結果?”)。

註冊機器有點難以生成代碼,但往往通過將這些無限寄存器用作數據流線來保留數據流。該數據流以及將其輕鬆分配給實際寄存器的能力(通過圖形著色進行標準寄存器分配)使得生成良好代碼變得相對容易。

如果您決定直接從這些代碼生成虛擬機代碼,則會獲得不同的性能特徵。從本質上講,堆棧計算機往往會獲得更小的代碼佔用空間。無限註冊機器往往會得到快速的解釋執行。正是由於這個原因,Google的Dalvik與JVM不同。 (也許他們也不想被Sun / Oracle起訴類文件格式。)

我建議使用以下文檔: 虛擬機攤牌:堆棧與寄存器 。 (PS:Anton Ertl作為作者的任何東西往往是一個有趣的讀​​物)。



許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow