测量程序启动时动态链接的时间?

时间:2014-07-08 06:50:56

标签: c++ linux profiling dynamic-linking

如何衡量在程序启动时动态链接所花费的时间?

想到的解决方案以及为什么我犹豫不决:

1)在运行程序之前和主要开始时打印一些东西。

这没有考虑在主 - 初始化全局和任何结果函数调用之前运行的可能代码。它没有自动开箱即用,它让我感到粗暴和准确的可疑。

2)对空程序的时间命令,该程序具有与要测试的程序相同的标题,并且动态链接到相同的库。

我不确定这个。我不知道编译器和链接器是否可以根据客户端代码的内容串通缩写动态链接,但似乎有可能。

编辑:在问了这个问题后6分钟,我仔细检查了谷歌上显而易见的搜索字词,“测量动态链接所花费的时间”,最后回到这里作为第一次点击。

1 个答案:

答案 0 :(得分:3)

使用LD_DEBUG

试试这个:

LD_DEBUG=statistics ./myprog

它将输出各种统计信息的简短列表。一个例子:

xenon-lornix:~> LD_DEBUG=statistics ls
     22833:
     22833:     runtime linker statistics:
     22833:       total startup time in dynamic loader: 2500702 clock cycles
     22833:                 time needed for relocation: 757822 clock cycles (30.3%)
     22833:                      number of relocations: 155
     22833:           number of relocations from cache: 8
     22833:             number of relative relocations: 1253
     22833:                time needed to load objects: 1325154 clock cycles (52.9%)

显示有关加载/运行ls命令的信息。

使用LD_DEBUG=help ./myprog会显示可用于LD_DEBUG的其他选项的名称。

更多信息可以在ld.sold-linux.so手册页中找到(实际上这些页面完全相同)。 Google搜索可以提供更多细节。