使用未命名的命名空间会减少链接时间吗?

时间:2012-09-17 20:54:51

标签: c++

假设我有一个包含许多目标文件的大型系统,这样链接时就成了问题。还假设我知道我的系统中的许多类和函数都没有在翻译单元之外使用。

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

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

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

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:1)

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

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