为什么GCC将帧指针放在64位上?

| 默认情况下,在64位架构上删除帧指针的依据是什么?我很清楚可以启用它,但是为什么在启用32位功能的同时,GCC首先要禁用它?毕竟,64位比32位CPU具有更多的寄存器。 编辑: 使用较新的GCC版本时,看起来x86的帧指针也会被删除。从手册中:   从GCC 4.6版开始,针对32位Linux x86和32位Darwin x86目标的默认设置(未针对大小进行优化)已更改为-fomit-frame-pointer。通过使用
--enable-frame-pointer
配置选项配置GCC,可以将默认值恢复为
-fno-omit-frame-pointer
。 但为什么?     
已邀请:
对于x86-64,ABI(PDF)鼓励不使用帧指针。基本原理是“我们现在拥有DWARF,因此它对于调试或解除异常不是必需的;如果我们从第一天开始就将其设为可选,则没有软件将依赖于它的存在。” x86-64确实比x86-32拥有更多的寄存器,但是仍然不够。从编译器的角度来看,释放更多通用寄存器始终是一件好事。是的,需要堆栈爬网的操作较慢,是的,但是它们是罕见的事件,因此这是一个很好的权衡方法,可以减少每个子例程调用的几个周期,减少堆栈溢出。     

要回复问题请先登录注册