怎么在积极内联的情况下分析C ++?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (26)

我试图找出我的C ++程序在哪里花费时间,使用gprof。这里是我的困境:如果我使用与我的发布版本相同的优化设置进行编译,几乎所有内容都被内联,并且gprof告诉我,90%的时间都花在核心例程中,其中所有内容都被内联了。另一方面,如果我在禁用内联的情况下进行编译,程序运行速度会降低一个数量级。

我想知道当我的程序在启用内联编译的情况下,我的核心例程中调用的过程需要多少时间。

我在四核英特尔机器上运行64位Ubuntu 9.04。我研究了google-perftools,但是在x86_64上似乎并不适用。在32位机器上运行不是一个选项。

有没有人有关于如何在启用内联时更有效地剖析我的应用程序的建议?

提问于
用户回答回答于
用户回答回答于

我假设你想要做的是找出哪些代码行花费你足够值得优化

可以手动完成,也可以使用其中一个可提供相同信息的分析器

顺便说一句,内联是有重要价值的,只有当内联的例程很小,并且自己不调用函数时,并且如果它们被调用的行足够有效,那么时间很重要。

至于调试和发布构建之间的数量级性能比,可能是由于许多事情,可能或可能不是内联。您可以使用stackshot方法来确定在哪种情况下发生了什么。我发现,由于其他原因,调试版本可能会变慢,例如递归数据结构验证。

扫码关注云+社区

领取腾讯云代金券