【问题标题】:How stack grow downwards when values store from top?当值从顶部存储时,堆栈如何向下增长?
【发布时间】:2017-03-20 22:37:13
【问题描述】:

我正在尝试了解堆栈的概念,但我很困惑,我试图找到答案但找不到。

好的,所以值仅从顶部存储在堆栈中,这意味着它随着值位置的增长而增长,这意味着增长方向应该向上,如图所示:

Stack grows upward example

但是 Stack 像描述的那样向下增长。怎么样??

如果我理解正确,那么:

当值存储在堆栈中时,它占用空间,因此这意味着堆栈没有增长,因为它的内存正在减少,但是当值从堆栈返回时,堆栈会增长,因为堆栈中的存储空间是空闲的。还有一个关于stackoverflow的答案说Direction of glow of stack is opposite to the direction of glow我说对了吗???如果不是请解释

【问题讨论】:

  • 堆栈可用的内存正在减少……这并不意味着堆栈占用的内存随着更多的东西被添加到堆栈中而减少。
  • @ArtOfWarfare 那么为什么以及如何说堆栈向下增长?
  • 红色箭头底部写“10”,上方写“0”。现在你有一个向下增长的堆栈。
  • 或者:将图像倒置。现在你有一个向下增长的堆栈。将图像旋转 90 度,您现在有一个向一侧增长的堆栈。或者也许我们应该把一张图片当作一张图片。

标签: python c stack


【解决方案1】:

堆栈通常表示任何后进先出 (LIFO) 数据结构。它是一种具有“push”和“pop”操作的数据结构。堆栈上项目的内存位置是向下还是向上“增长”是一个实现细节,无论哪种方式都可以实现。

当程序员说堆栈时,我们通常指的是当前进程(线程)的调用堆栈。在我的机器上,调用堆栈确实向下增长,因此在“推送”指令之后,堆栈的顶部位于较低的地址。这也是一个实现细节,C 程序员通常不必担心。

【讨论】:

  • 但是调用堆栈意味着当我们调用函数或其他东西时,它意味着堆栈现在正在返回值,所以返回值意味着“pop”而你说的是“push”?
  • 这里说的是机器指令“push”。例如,当您“推”时,因为您输入了一个新函数,您向堆栈添加了一个值,因此堆栈的顶部将移动到较低的地址。这就是我们所说的堆栈“向下增长”的意思。
【解决方案2】:

从历史上看,栈的“底部”在内存的顶部,向下增长,而堆从内存的底部开始,向上增长。这使得它们相互覆盖的机会最小。

从这段历史中,例如在 Intel 上,push 和 pop CPU 指令与这个向下增长的堆栈一起工作。因此,如果您将某些内容压入堆栈,则堆栈指针减少,如果您弹出某些内容,则堆栈指针增加

【讨论】:

    猜你喜欢
    • 2011-04-04
    • 2011-12-28
    • 2011-03-23
    • 2018-05-30
    • 1970-01-01
    • 2020-06-15
    • 2012-07-30
    相关资源
    最近更新 更多