asd*_*sdf 14 64-bit x86 assembly gcc stack-frame
默认情况下,将帧指针放在64位体系结构上的理由是什么?我很清楚它可以启用但是为什么GCC在启用32位时首先禁用它?毕竟,64位的寄存器多于32位CPU.
编辑: 当使用更新的GCC版本时,看起来也会为x86删除帧指针.从手册:
"从GCC版本4.6开始,32位Linux x86和32位Darwin x86目标的默认设置(不优化大小时)已更改为-fomit-frame-pointer.默认设置可以恢复为-fno-通过使用--enable-frame-pointer配置选项配置GCC来省略帧指针."
但为什么?
zwo*_*wol 10
对于x86-64,ABI(PDF)鼓励缺少帧指针.基本原理或多或少是"我们现在有DWARF,因此没有必要进行调试或异常展开;如果我们从第一天开始就选择它,那么任何软件都不会依赖于它的存在."
x86-64确实有比x86-32更多的寄存器,但它仍然没有足够的.从编译器的角度来看,释放更多通用寄存器始终是一件好事.需要堆栈爬行的操作较慢,是的,但它们是罕见的事件,因此在每个子例程调用中减少几个循环以及更少的堆栈溢出是一个很好的权衡.
归档时间: |
|
查看次数: |
3058 次 |
最近记录: |