为啥堆栈会增长到较低的地址? [复制]

Posted

技术标签:

【中文标题】为啥堆栈会增长到较低的地址? [复制]【英文标题】:Why stack grows to lower addresses? [duplicate]为什么堆栈会增长到较低的地址? [复制] 【发布时间】:2011-09-04 02:07:58 【问题描述】:

可能重复:Why do stacks typically grow downwards?

我见过的每一个架构,堆栈都在以推送值被赋予较低内存地址的方式增长。有什么原因吗?

【问题讨论】:

非常有趣的问题!几十年前首次发明堆栈时,RAM 价格昂贵且供不应求。因此,堆栈设计者为了管理宝贵的 RAM,将堆栈向下扩展。这意味着每次将某些内容压入堆栈时使用的 RAM 越来越少。 @Pete:开玩笑吧? 可用的内存越来越少我猜 【参考方案1】:

最低地址总是为特殊寄存器保留。选择最低可确保无论 micro 版本(可变数量的 ram)如何,特殊寄存器始终位于同一位置。

通过从最顶部开始堆栈,您只需要知道一件事。顶部地址。

它可以解耦两个独立的设计问题。保留的寄存器放置和堆栈来源。

【讨论】:

我建议您扩展您的答案并增加一点清晰度。在阅读了您的短语“最低地址始终保留给特殊寄存器”之后。今天一个汇编语言的新手问我“如何将 RAM 用作寄存器”(显然你不能——寄存器在 CPU 上,STACK 是 RAM 中的一个区域,而 RAM 不在 CPU 上)。

以上是关于为啥堆栈会增长到较低的地址? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

真正的内存结构是啥? [复制]

编译器如何在堆栈上安排局部变量?

关闭堆栈中较低的 ViewController 的行为不符合预期

如何在递归期间将所有先前帧(较高帧)的值传递到较低帧

为啥堆栈通常会向下增长?

linux是不是在较低的堆栈端下方提供了保证的不可访问的内存区域?