【问题标题】:How to profile static/global initialization?如何分析静态/全局初始化?
【发布时间】:2019-06-30 23:34:01
【问题描述】:

我正在尝试分析我的代码运行时和启动时间。到目前为止,我已经使用 perf 和 uftrace 来查找运行时问题,并且我在运行时检测到了很多问题,但我还想了解更多关于初始化的信息,并知道我在哪里浪费了时间。我尝试使用LD_DEBUG=statistics 来获取有关动态加载的库的更多信息,但我没有注意到任何异常情况,这是有道理的,因为我将所有库都与可执行文件静态链接。

是否可以测量初始化静态/全局变量以及在流程到达main() 之前发生的任何事情需要多长时间?

【问题讨论】:

  • gprof 应该能够处理它。在如何仅在代码的选定部分上获得 gprof 覆盖方面存在一些未记录的 hack。我忘了,在我的脑海中,但它非常适合谷歌搜索。默认情况下打开它,然后在main 中将其作为第一笔业务关闭。现在,您只配置了静态/全局初始化...

标签: c++ linux performance profiler


【解决方案1】:

perf 适用于初始化内容。

我试过这个程序:

struct BeforeInit {
    volatile int sink;

    BeforeInit() {
        for (int i = 0; i < 1000000000; i++) {
            sink = i;
        }
    }
};

BeforeInit global;

int main() {
    return 0;
}

perf recordperf report 显示了这个函数中的开销:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-21
    • 1970-01-01
    相关资源
    最近更新 更多