查找链接时间瓶颈

Posted

技术标签:

【中文标题】查找链接时间瓶颈【英文标题】:Finding link time bottlenecks 【发布时间】:2010-09-22 11:55:11 【问题描述】:

一个我没有看到答案的问题,我觉得很有趣。所有其他线程似乎都在讨论强制问题,即切换到动态链接或只是分配工作负载。我更感兴趣的是真正找出导致链接需要这么长时间的原因。

问题是我真的没有看到任何从链接器获取相关指标的官方方法,至少对于 VS 链接器来说不是。 /verbose 开关可以让您深入了解链接器正在做什么,但它根本不会给您任何细粒度的时序。

我一直在考虑从一个工具运行链接器进程,该工具以每行为基础进行实际测量。虽然这不能提供准确的时序,但它可能足够准确以查明链接瓶颈。

有谁知道更好的方法,或者甚至是完成这项任务的工具?

【问题讨论】:

很难看出这一点,链接器除了其增量链接支持之外几乎没有旋钮。链接本质上是一个 O(n^2) 问题,你需要一个更小的 n。 【参考方案1】:

在http://gameangst.com/?p=46 上找到了一篇关于此的优秀文章系列,其中详细介绍了影响链接时间的因素。最后作者还提供了一个他称之为符号排序的程序(http://gameangst.com/?p=320)。这是我一直在寻找的程序,因为它极大地帮助您确定在哪里花费精力。启动、运行和工作大约需要 10 秒,这并没有什么坏处!

【讨论】:

【参考方案2】:

虽然没有直接回答你的问题:

在 VS 中,链接器还负责代码生成和全局优化,您可以尝试禁用“链接时间代码生成”以减少链接时间。

编辑:因此,由于链接器的全局性质,您不能说链接模块 X 需要 10% 的时间。

【讨论】:

这是一个很好的观点,如果也可以对 LTCG 和优化阶段进行基准测试,那就太好了。总的来说,我只是认为编译器和链接器都应该能够使用正确的开关输出性能指标,因为编译和链接时间都是大型代码库上的常见问题。它还将帮助诸如 boost 之类的库更容易地对我们知道会对链接和编译时间产生负面影响的更奇特的构造进行基准测试。

以上是关于查找链接时间瓶颈的主要内容,如果未能解决你的问题,请参考以下文章

查找谁公开共享链接并查找谁转发了给定链接

查找所有使用链接服务器的视图

查找带有 beautifulsoup 的特定链接

在 PHP Selenium 中通过链接查找元素

查找页面中每个链接的坐标

带有查找表和链接表的一对多查询