【发布时间】:2019-05-20 03:56:00
【问题描述】:
我一直在寻找这个答案一个多星期,但没有运气。到目前为止,我已经了解到堆栈会在函数嵌套或中断发生时保存返回地址,但最近我了解到现代处理器使用链接寄存器来实现相同的目标。经过一番研究,我知道堆栈确实被用于在旧处理器中保存返回地址。但是,为什么现代处理器在旧实现工作时使用整个单独的寄存器( LR )来保存返回地址对我来说没有意义?与基于堆栈的实现相比,LR 有什么好处?
提前致谢!!!
【问题讨论】:
-
这是一个寄存器,不是内存。使用起来要快得多。
-
速度一,内存真的很慢。通常,更多的寄存器比使用更少的寄存器和更多的堆栈更快。传入参数的答案相同,如果架构有足够的寄存器,您将看到使用的寄存器与堆栈作为首选项。
-
不限于arm。
-
这是有道理的,寄存器访问速度更快。然而,如果函数超过 1 级深度嵌套,我们有 1 个 LR,它会迫使我们将 LR 存储到堆栈中,这反过来会降低处理器的速度。如果我错了,请纠正我!