【发布时间】:2014-04-29 20:03:21
【问题描述】:
假设我在 100 个不同的 cpp 文件中使用 shared_ptr<MyAwesomeClass>。编译器是否会在每个对应的 obj 中创建 shared_ptr 的 MyAwesomeClass 特化,然后强制链接器筛选所有对象,选择一个获胜者,并删除所有失败者?
如果是这样,这种影响是否会主导链接时间,或者其他操作是否会花费更长的时间以至于无关紧要?
我正试图弄清楚为什么我的一个项目需要 100 多秒才能链接,而另一个类似大小的项目却能更快地完成。到目前为止,我发现的唯一系统性差异是,慢速模型大量使用了一些较新的标准库模板,例如 shared_ptr 和 function。
有问题的编译器/链接器是 Micrsoft 的 2012 版本。
【问题讨论】:
-
@CaptainObvlious 已修复
-
时髦。我讨厌做傻瓜;)
-
您将拥有大量的 COMDAT 部分,所有部分都具有相同的代码。链接器只选择其中一个,丢弃其余的。模板并不便宜。这是否真正解释了慢速链接并不明显。也许您可以从 /VERBOSE 选项中获得一些见解。
-
@CaptainObvlious,我讨厌犯一些小错误,因为这些小错误会影响到更明智的磨削,所以我很高兴能直截了当。
-
@HansPassant 尝试过 /VERBOSE,但并没有告诉我太多。很难说这是它的错还是我的错。
标签: c++ visual-c++ linker