首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LIFO栈算法设计

LIFO栈算法设计
EN

Stack Overflow用户
提问于 2010-05-13 20:24:30
回答 2查看 1K关注 0票数 3

我正在实现一个基于堆栈的VM,我一直试图阅读一些解释或概述处理堆栈的算法的文献,但没有用。下面是一个例子:

代码语言:javascript
复制
int i = 3
int j = 4
int k = 5

让我们假设ijk是局部变量,因此它们将传统上存储在堆栈中。程序集/字节码翻译如下所示:

代码语言:javascript
复制
pushi 3
pushi 4
pushi 5

堆栈将是:5 4 3

我有一个整数堆栈和一个字符串堆栈,因此产生了pushi,但是我的问题是,如果没有将它们存储在堆中(带有一些ptr*或文字标识符),编译器或解释器如何知道如果我想在定义后执行类似int x = i + j的操作,则必须分别弹出2三次都尽力不丢失k (将其保存在寄存器或其他东西中,然后再按下)?

我希望我的问题是有意义的,而且可能有一个更聪明的方法:P :谢谢你的任何见解!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-05-13 20:33:15

这通常是用一个叫做堆栈框架的东西来完成的。您可以同时为所有局部变量(分配/优化到寄存器中的模块变量)分配空间,存储该块的基本地址,并从那里对偏移进行操作。然后在范围出口处弹出堆栈中的所有内容。

票数 2
EN

Stack Overflow用户

发布于 2010-05-13 20:33:57

编译器所做的--在这种情况下--通过直接添加到堆栈指针,立即获取一堆堆栈空间,然后索引到堆栈值中,而不使用带普通内存读取函数的push和pop。然后,当完成时,将堆栈减回其原始值。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2830053

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档