我正在实现一个基于堆栈的虚拟机,一直在尝试阅读有关处理堆栈算法的文献或概述,但没有发现相关内容。以下是一个示例:
int i = 3
int j = 4
int k = 5
假设i
、j
和k
是本地变量,因此它们通常存储在堆栈上。汇编/字节码翻译大致如下:
pushi 3
pushi 4
pushi 5
堆栈将是:5 4 3
我有一个整数堆栈和一个字符串堆栈,因此使用了pushi
,但我的问题是,如果我想在定义后执行像int x = i + j
这样的操作,编译器或解释器如何知道我需要分别弹出两个和三个元素,并且要尽力不丢失k
(将其保存在寄存器中或其他地方,然后再将其推回)?
希望我的问题有些意义,可能还有更聪明的方法:P谢谢您的任何见解!