这与 frame pointer omitting ? Any risk? 相关但不相同
我正在尝试遵循这篇旧的(但仍然相关的文章)
http://blogs.msdn.com/b/larryosterman/archive/2007/03/12/fpo.aspx
拉里(作者写道)
然而,在进一步讨论中,一位用户写道
我有几个问题。
yield 不会超过 yield 。
更多的寄存器 o 玩。
你?
最后在这篇文章中
http://www.altdevblogaday.com/2012/05/24/x64-abi-intro-to-the-windows-x64-calling-convention/
作者说
优化的构建不会优化多余的分配吗?
最佳答案
几乎。严格来说,溢出代码是编译器为实现寄存器溢出而添加的代码。溢出本身是将有效范围标记为无法放入寄存器的决定。
作者可能是正确的,在现代处理器架构中,FPO 将产生显着性能增益的函数种类比过去少。然而 FPO 确实使代码更小,减少了缓存压力。它们确实减少了注册压力。这些在某些设置中可能很重要。他们确实通过一些指令加速了 prolog 和 epilog 代码。关于调试器在没有 FP 的情况下无法正常工作的观点值得注意。这意味着核心转储对于生产优化代码的事后分析不太有用。除了最终测试之外,您永远不想在开发过程中使用 FPO。
现代处理器是如此多样和复杂,以至于您在尝试和测量之前几乎永远不知道什么是“相关的”。
我编写了一个中等大小的 C 库(20K SLOC),它在 gcc 下的总体运行时间有很小(约 5%)的差异。这是必须在 gcc 和 Visual C 下编译的脚本语言的 native 语言扩展。使用它会拆分构建路径。我认为 5% 不值得为了扩展服务的目的。但如果是动态流体模拟来预测天气,那么 5% 可能值(value)数百万美元。决定会有所不同。
这完全取决于编译器和优化器设计者。从 MS 文档 here 看来,MS 已将 ABI 定义为所有数据都需要主空间,即使它的整个生命周期都花在寄存器中。
关于optimization - 帧指针优化的使用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23528816/