正如在这个问题中看到的,ARM 堆栈增长方向是可选择的,但究竟是谁选择了这个方向?操作系统?应用程序?生产厂家?
如果是操作系统,iOS、Android 和 Windows RT 的堆栈方向是什么?
最终是操作系统的设计者选择了堆栈的增长方向。
如果您想创建自己的堆栈,而不依赖操作系统提供的堆栈,则可以使用您选择的任何类型的堆栈。然而,如果你想使用操作系统堆栈,你别无选择,只能接受操作系统给你的东西。
第一个在 ARM 上运行的操作系统是 Arthur,由 Acorn Computers 编写。Arthur 使用向下增长的堆栈,很可能是因为编写 Arthur 的开发人员习惯了 6502 上的堆栈,该堆栈也是向下增长的。(Arthur 并没有持续多久,很快就被 RISC OS 取代了。)
有一个在 Acorn 硬件上运行的 ARM Linux 版本 - 我的 1995 年 Acorn Risc PC 上仍然有它的一个版本。我知道该版本的 ARM Linux 内核会出于各种目的调用 RISC 操作系统,因此它也必须使用向下增长的堆栈。其他操作系统开发人员很可能效仿 Acorn 和/或 ARMLinux 开发人员的做法。
至于 iOS,它似乎使用了向下增长的堆栈(STMFD此处的说明表明了这一点)。我怀疑 Android 和 Windows RT 也是如此,但我还无法验证这一点。