2011-02-16 56 views

回答

2

帧指针并不是真正需要正确执行的,有时除非有例外展开。动态堆栈增长通常需要某种类型的帧指针,但它并不依赖于特定的寄存器,而是通过正常的数据流分析进行分配。

基本上,将FP从固定寄存器赋值降级到伪寄存器,并使初始化受到死存储消除的影响。所以第一个问题的答案是否定的,它并不总是省略它。

0

不是mips人,而是应该应用于任何系统的东西:如果堆栈需要在任何时候对齐,则需要使用框架来存储原始指针(因为堆栈地址和对齐方式可能不适用知道)

1

不,通常不需要帧指针。编译器可以访问与堆栈指针相关的局部变量,并且不需要特殊的帧指针。尽管如此,标准帧指针设置序列可以帮助调试崩溃的程序(即使不用-g进行编译),因为调试器可以使用帧指针信息来重新构建调用堆栈。没有帧指针,它没有信息来确定一个堆栈帧开始和下一个结束。

因此,在使用时,如果发生崩溃,您的交易绩效会更加困难。如果你的代码的性能关键部分是小循环,并且不调用任何函数,那么省略帧指针也会带来很小的优势。