C++ 测量程序启动时动态链接所用的时间?

C++ 测量程序启动时动态链接所用的时间?,c++,linux,profiling,dynamic-linking,C++,Linux,Profiling,Dynamic Linking,如何衡量程序启动时动态链接所花费的时间 想到的解决方案以及我犹豫的原因: 1)在运行程序之前和main开始时打印内容。 这并没有考虑在全局函数的main初始化和任何结果函数调用之前可能运行的代码。它不是自动开箱即用的,而且,它给我的印象是粗糙和可疑 2)空程序上的time命令,该程序与要测试的程序具有所有相同的标头,并动态链接到相同的LIB。 我不确定这件事。我不知道编译器和链接器是否可以根据客户端代码的内容合谋缩写动态链接,但这似乎是可能的 编辑:问了这个问题6分钟后,我在谷歌上仔细检查了明显

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

想到的解决方案以及我犹豫的原因:

1)在运行程序之前和main开始时打印内容。

这并没有考虑在全局函数的main初始化和任何结果函数调用之前可能运行的代码。它不是自动开箱即用的,而且,它给我的印象是粗糙和可疑

2)空程序上的time命令,该程序与要测试的程序具有所有相同的标头,并动态链接到相同的LIB。

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


编辑:问了这个问题6分钟后,我在谷歌上仔细检查了明显的搜索词“测量动态链接所花费的时间”,结果第一次点击这里。

使用
LD\u 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\u PRELOAD
,启动程序。您实际想做什么?如果您只想测量“启动”的时间,那么使用时间myapp--exit in main(并在main的开头添加一个选项)If(strcmp(argv[1],“--exit in main”)==0)exit(0);。如果您想将其与“非动态”进行比较,静态链接代码。根据我的经验,这没有什么区别,因为大多数加载时间都是从磁盘读取相关代码,而不是“链接”动态链接库的一部分。和
LD_DEBUG=all./myprog
将为您提供惊人的输出量…其中一些非常有用!哇,回答得很好。这些链接中还有许多其他漂亮的环境变量。谢谢。