如何剖析静态/全局初始化?

时间:2019-06-30 23:34:01

标签: c++ linux performance profiler

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

是否可以测量初始化静态变量/全局变量以及流到达main()之前发生的所有事情所需的时间?

1 个答案:

答案 0 :(得分: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表示此功能的大部分开销:

enter image description here