过度使用堆栈

时间:2012-08-05 11:36:53

标签: stack computer-science

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

我们说我在堆栈上创建了很多变量

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

现在我想调用x0。由于堆栈是LIFO,其中x100,...,x1暂时存储,而x0正在被提取?我的意思是,他们不得不把它们放在寄存器上吗?如果是这样,那么就没有足够的寄存器。使用自助餐厅托盘的标准类比,如果我想要到达底部托盘,我需要很多人在我拿到它的时候抓住其他托盘,除非有三个堆叠并且我可以做一些&# 34;河内塔"溶液...

显然这个问题表明我对堆栈的无知以及它是如何工作的。提前谢谢。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

LIFO的重点,就是你在下一个你需要的最后一个值,所以在你的例子中你要么以相反的顺序推它们,要么你定义一个结构他们都在那里并把它的地址推到了堆栈上。