我是汇编语言的初学者,并注意到编译器发出的x86代码通常在释放/优化模式下保持帧指针,当它可以使用EBP寄存器时.
我理解为什么帧指针可能使代码更容易调试,并且如果alloca()在函数内调用则可能是必要的.但是,x86只有很少的寄存器,并使用其中两个寄存器来保存堆栈帧的位置,当一个就足够了,对我来说没有意义.为什么即使在优化/发布版本中省略框架指针也是一个坏主意?
我的问题很简单,为什么x86架构使用两个堆栈寄存器(esp ; ebp)?
堆栈帧的长度已在编译期间确定,然后我认为我们可以只使用一个寄存器(例如esp)来访问堆栈,并维护以前在ebp堆栈中(或在其他内存中的寄存器中)的基址地区,但这将导致更多的性能损失)
可能吗?