我正在实现一个基于堆栈的VM,我一直试图阅读一些解释或概述处理堆栈的算法的文献,但没有用。下面是一个例子:
int i = 3
int j = 4
int k = 5让我们假设i、j和k是局部变量,因此它们将传统上存储在堆栈中。程序集/字节码翻译如下所示:
pushi 3
pushi 4
pushi 5堆栈将是:5 4 3
我有一个整数堆栈和一个字符串堆栈,因此产生了pushi,但是我的问题是,如果没有将它们存储在堆中(带有一些ptr*或文字标识符),编译器或解释器如何知道如果我想在定义后执行类似int x = i + j的操作,则必须分别弹出2和三次,和都尽力不丢失k (将其保存在寄存器或其他东西中,然后再按下)?
我希望我的问题是有意义的,而且可能有一个更聪明的方法:P :谢谢你的任何见解!
发布于 2010-05-13 20:33:15
这通常是用一个叫做堆栈框架的东西来完成的。您可以同时为所有局部变量(分配/优化到寄存器中的模块变量)分配空间,存储该块的基本地址,并从那里对偏移进行操作。然后在范围出口处弹出堆栈中的所有内容。
发布于 2010-05-13 20:33:57
编译器所做的--在这种情况下--通过直接添加到堆栈指针,立即获取一堆堆栈空间,然后索引到堆栈值中,而不使用带普通内存读取函数的push和pop。然后,当完成时,将堆栈减回其原始值。
https://stackoverflow.com/questions/2830053
复制相似问题