0

这确实是一个理论问题。我的示例将使用 C,但语言并不那么重要。

假设我在堆栈上创建了很多很多变量

int x0 = 0;
int x1 = 1;
.
.
.
int x100 = 100;

现在我想打电话给 x0。由于堆栈是 LIFO,x100,...,x1 临时存储在哪里,而 x0 正在被获取?我的意思是,它们不必被放在寄存器上吗?如果是这样,根本就没有足够的寄存器。使用自助餐厅托盘的标准类比,如果我试图到达底部托盘,我需要很多人在我拿到它的时候抓住其他托盘,除非有三个堆叠并且我可以做一些“河内塔” “ 解决方案...

显然,这个问题表明我对堆栈及其工作原理的无知。提前致谢。

4

2 回答 2

0

堆栈的顶部只是一个内存地址,因此您可以使用偏移量访问它。也就是说,这会使您的代码非常脆弱。

LIFO 的全部意义在于,您放的最后一个值就是您需要的下一个值,因此在您的示例中,您要么以相反的顺序推送它们,要么定义一个包含它们的结构并将其推送栈上的地址。

于 2012-08-05T12:27:06.610 回答
0

它不是那种粒度级别的堆栈。

堆栈存储堆栈帧。每个堆栈帧存储一组局部变量,当然可以在恒定时间内访问(通过相对于堆栈指针的偏移量)。

于 2012-08-05T11:39:03.220 回答