gpt4 book ai didi

assembly - 后进先出栈算法设计

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:12:49 25 4
gpt4 key购买 nike

我正在实现一个基于堆栈的 VM,并且我一直在尝试阅读解释或概述用于处理堆栈的算法的文献,但无济于事。这是一个例子:

int i = 3
int j = 4
int k = 5

假设 ijk 是局部变量,因此它们通常存储在堆栈中。汇编/字节码翻译看起来像:

pushi 3
pushi 4
pushi 5

堆栈将是:5 4 3

我有一个整数堆栈和一个字符串堆栈,因此是 pushi,但是我的问题是没有将它们存储在堆上(使用一些 ptr* 或文字标识符) ,编译器或解释器怎么会知道如果我想在定义之后做类似 int x = i + j 的事情,我必须弹出 twothree 次,以及尽我所能不丢失k(将其保存在寄存器或其他东西中,然后将其推回)?

我希望我的问题有一定道理,并且可能有更聪明的方法 :P 感谢您提供任何见解!

最佳答案

这通常是通过一个叫做 stack frame 的东西来完成的。 .您一次为所有 局部变量分配空间(模变量分配/优化到寄存器中),存储该 block 的基地址,并从那里开始偏移量。然后在范围退出时将所有内容从堆栈中弹出。

关于assembly - 后进先出栈算法设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2830053/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com