我认为我理解堆栈内存的基本知识,但我仍然不完全理解哪个负责管理堆栈的机制 - 是编译器,cpu架构?是编程语言依赖吗?
例如,我读到ARM中存在减少函数调用中堆栈使用的倾向,因此函数的参数通常通过4个寄存器传递。但是,在我看来,这也可以使用其他cpu中的通用寄存器来实现。架构如何强加这种需求?
在其他地方,我读到FORTRAN 77中没有使用堆栈。
存在堆栈向上/向下增长的问题。谁负责呢?
总的来说,我想知道它是否依赖于cpu以及它是如何强加的?否则谁负责这些决定?
感谢。
答案 0 :(得分:0)
处理器无法强制执行。调用约定由编译器决定,并且大多数编译器不会为了这样做而破坏它们的语言标准。
只要进程使用push
/ pop
之类的内容,堆栈的增长方向就由处理器决定。如果他们直接访问esp
,他们应该关注,但也没有。