【问题标题】:How do I profile code beyond per-function level?如何在每个功能级别之外分析代码?
【发布时间】:2010-12-03 10:29:42
【问题描述】:

AFAIK 分析器只能判断每个函数花费了多少时间。但由于 C++ 编译器倾向于积极内联代码,而且有些函数并不那么短,因此了解更多细节通常很有用 - 每个构造消耗多少时间。

除了将代码重组为更小的函数外,如何实现?

【问题讨论】:

    标签: c++ performance optimization profiling


    【解决方案1】:

    如果您使用采样分析器(例如ZoomShark),而不是仪器分析器(例如gprof),那么您可以获得更精细的粒度配置文件,一直到语句和指令级别。

    【讨论】:

    • ++ 在您关心的 时间间隔内尝试 Zoom 或任何获取 stack 样本的分析器,随机 wall-clock 次关于,并告诉您每行代码它出现在的样本的百分比Here's a list of reasons why. 令人惊讶的是有多少分析器没有“明白”。
    • @sharptooth:行百分比墙时间堆栈采样器如此有效的原因在于它们自动化了(恕我直言)更有效的manual method - 随机暂停。
    【解决方案2】:

    如果您可以使用callgrind,那么您可以获得哪些方法占用了大部分处理时间的摘要。然后您可以使用kcachegrind 查看结果。它提供了一个非常漂亮的图表,您可以通过它轻松浏览并找到瓶颈。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-04-02
      • 1970-01-01
      • 1970-01-01
      • 2018-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多