15

假设我有一个包含许多目标文件的大型系统,因此链接时间是个问题。还假设我知道我系统中的许多类和函数没有在它们的翻译单元之外使用。

  1. 假设如果我减少带有外部链接的符号数量,我的链接时间会减少是否合理?
  2. 如果是这样,将仅在单个 TU 中使用的实体(例如,类和函数)放入未命名的命名空间对我有什么好处?从技术上讲,具有外部链接的实体将在未命名的命名空间中保留其外部链接,但是,正如 C++11 标准所述,

尽管未命名命名空间中的实体可能具有外部链接,但它们实际上是由其翻译单元唯一的名称限定的,因此永远无法从任何其他翻译单元看到。

链接器算法是否基于以下知识执行优化:在未命名的命名空间中具有外部链接的实体在其命名空间之外不可见?

4

2 回答 2

4

是的,我认为确实减少了链接时间。我认为在 Google chromium stie 上是这样的:“未命名的命名空间将这些符号限制在编译单元中,提高了函数调用成本并减小了入口点表的大小。” 这里是链接

我知道这是关于 chromium 项目的,但它应该适用于其他 c++ 项目。

于 2012-09-18T03:22:33.340 回答
1

我看不出链接器如何进行这样的优化,因为当链接器获得相关符号时,它们看起来就像普通的装饰外部链接符号。除非链接器有关于编译器如何在匿名命名空间中修饰名称的特定信息,否则我看不到它可以优化其工作的任何方式。

您是否确认您的链接器实际上受 CPU 限制而不是 I/O 限制?如果它不是 CPU 绑定的,它可能无助于重新组织你的代码。

于 2012-09-18T14:56:37.353 回答