我正在尝试获得堆栈的概念,我有困惑,我试图找到答案,但无法找到。
好吧所以值只从顶部存储在堆栈中意味着它随着值位置逐渐增长而增长,这意味着它的增长方向应该是向上的,如图所示:
但Stack如上所述向下增长。怎么样??
当值存储在堆栈中时,它占用空间,因此它意味着堆栈不会增长,因为它的内存正在减少,但是当值从堆栈返回时,堆栈会增长,因为存储在堆栈中是空闲的。还有一个关于stackoverflow的答案说Direction of glow of stack is opposite to the direction of glow我是否正确?如果没有请解释
答案 0 :(得分:5)
堆栈通常表示任何后进先出(LIFO)数据结构。它是一个具有操作" push"和" pop"。堆栈中项目的内存位置是否增长"向下或向上是一个实现细节,它可以以任何一种方式实现它。
当程序员说堆栈时,我们通常是指当前进程(线程)的调用堆栈。在我的机器上,调用堆栈确实向下增长,以便在" push"指令,堆栈顶部位于较低的地址。这也是一个实现细节,并不是C程序员通常需要担心的事情。
答案 1 :(得分:2)
历史上,堆栈的“底部”位于内存的顶部,向下增长,堆从内存的底部开始,向上增长。这使得他们互相覆盖的可能性最小。
从这段历史来看,例如在英特尔上,推送和弹出CPU指令适用于这种不断增长的堆栈。因此,如果你把东西推到堆栈上,堆栈指针减少,如果你弹出一些东西,增加。