调用堆栈和帧堆栈具有不同位置的平台?

时间:2013-02-14 09:11:21

标签: architecture hardware platform

是否有硬件平台本身支持两个不同的内存位置来存储调用堆栈和堆栈的堆栈功能?首先 - 可能受保护以读取和写入用户代码。 特别感兴趣的是硬件平台,它是为传统的结构化语言(即C / C ++)设计的,但不是异国情调的。

1 个答案:

答案 0 :(得分:0)

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

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

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

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

实际上,对于许多CPU架构 - 特别是RISC架构 - 编译器使用通用内存访问指令来创建和使用堆栈帧,因此决定堆栈帧所在的位置以及它们的使用方式是编译器作者而不是CPU架构师。

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