调用堆栈管理是否依赖于机器?

时间:2012-12-31 08:18:01

标签: memory-management callstack

我认为我理解堆栈内存的基本知识,但我仍然不完全理解哪个负责管理堆栈的机制 - 是编译器,cpu架构?是编程语言依赖吗?

例如,我读到ARM中存在减少函数调用中堆栈使用的倾向,因此函数的参数通常通过4个寄存器传递。但是,在我看来,这也可以使用其他cpu中的通用寄存器来实现。架构如何强加这种需求?

在其他地方,我读到FORTRAN 77中没有使用堆栈。

存在堆栈向上/向下增长的问题。谁负责呢?

总的来说,我想知道它是否依赖于cpu以及它是如何强加的?否则谁负责这些决定?

感谢。

1 个答案:

答案 0 :(得分:0)

处理器无法强制执行。调用约定由编译器决定,并且大多数编译器不会为了这样做而破坏它们的语言标准。

只要进程使用push / pop之类的内容,堆栈的增长方向就由处理器决定。如果他们直接访问esp,他们应该关注,但也没有。