我想我了解堆栈内存的基本原理,但我仍然不完全理解哪一种机制负责管理堆栈的方式-是编译器,cpu架构吗?它是否依赖于编程语言?
例如,我读到在ARM中有减少在函数调用中使用堆栈的趋势,所以函数的参数通常通过4个寄存器传递。然而,在我看来,这也可以在其他cpu中使用通用寄存器来实现。架构如何实现这种需求?
我在别处读到,在FORTRAN 77中没有使用堆栈。
还有堆栈向上/向下增长的问题。谁对此负责?
总的来说,我想知道它是cpu依赖的,它是如何强加的?否则谁对这些决定负责?
谢谢。
不能由处理器强加。调用约定由编译器决定,大多数编译器不会为了这样做而破坏其语言标准。
堆栈的增长方向是由处理器决定的,只要进程使用像push
/pop
这样的东西。如果他们直接访问esp
,他们应该遵循,但不要太。