0

是否有一个硬件平台本机支持两个不同的内存位置来存储调用堆栈和函数堆栈帧的堆栈?首先——也许保护用户代码的读写。对硬件平台特别感兴趣,这些平台是为传统的结构化语言(即 C/C++)而设计的,但并不陌生。

4

1 回答 1

0

这是非常低资源微控制器的常见设置。

这种安排的动机通常是以下一种或两种:

1) 以核心速度运行的片上 SRAM 数量有限(通常为 1 或 2 kB),而额外的内存访问时间较慢 - 1kB 足够用于返回地址的几个线程堆栈,而不是用于大型自动变量存储在堆栈中。2) 分段寻址模式,其中段内存储器访问指令使用较短的操作码进行编码,因此可以更快地从 RAM 中获取。

这种安排使函数调用和返回的简单情况变得便宜。

在实践中,对于许多 CPU 架构——尤其是 RISC 架构——编译器使用通用内存访问指令来创建和使用堆栈帧,因此关于堆栈帧所在的位置以及如何使用它们的决定是编译器作者的一项任务而不是 CPU 架构师。

我怀疑您对这个问题的想法是保护返回地址不被堆栈帧中的其他数据覆盖?

于 2013-02-15T01:12:39.233 回答