2010-03-02 87 views

回答

4

使用堆栈指针很好。毕竟它总是指向堆栈。如果函数中有任何推入或弹出指令,那么跟踪堆栈指针到函数参数的偏移量就会有点困难。当没有帧指针时,它很难在调试器中返回堆栈。

使用帧指针可以使调试器和编译器的作业变得更容易,但不一定需要。

设置帧指针需要一条指令,它使用了一个可能用于其他事情的寄存器。因此,使用堆栈指针是优化代码的常用技巧。微软的编译器甚至有这个优化的名称,他们称之为Frame Pointer Omission

+0

准确简短的答复。感谢您的信息John – 2010-03-02 02:43:54

+0

John,只是一个简单的问题。当你说使用Frame指针调试器的工作变得容易时,你在说什么调试器? – 2010-03-02 02:47:40

+0

任何调试器。当你有帧指针时,很容易重建调用堆栈并将其显示在调试窗口中。如果没有帧指针,调试器必须实际反编译代码才能显示调用堆栈。 – 2010-03-02 02:56:39

3

专用帧指针寄存器绝对是常见ABI个比较流行的调用约定,但在使用不同的(可能更简单)的调用约定时,这纯粹是用于说明目的(添加一帧指针寄存器没有什么本质上的“错误”对那些片段只会让他们更长时间,并没有什么实质性的变化)。

+0

感谢您的信息。此网站是目前该区块中最好的 – 2010-03-02 02:43:01