2013-02-11 50 views
1

我读过最好有内部链接(对于变量,自由函数等),因为这会减少从特定编译单元“导出”的符号数量。这样建立时间可能会更好。外部链接是否增加链接/构建时间?

这是真的吗?

使用内部链接的另一个优点是名称冲突不会有任何问题。

参考:Large-Scale C++ Software Design

+2

我对此表示怀疑。如果你真的可以自由选择,那就意味着首先不需要链接,所以你不必为此付出代价。只是有一个出口的符号应该不会很重。重要的区别在于具有*多个*内部链接的拷贝与一个单独的外部链接版本的对比。 – 2013-02-11 09:24:55

+0

所以可能它只是在obj/o文件中的一些额外的大小... – fen 2013-02-11 09:29:11

回答

1

在理论上是的,但是...... C++对泛型编程的发展。名称空间的引入限制了名称冲突问题。

以“仅包含头文件的库”的形式编写程序总是比较频繁的,它包含从一个包含主目录实例化一个“管理器对象”的主文件,该文件负责所有的编排和供应最后的手段“抓住”最终逃脱的例外。长符号表可以通过“预编译头文件”更快地完成。

从这个意义上说,所有的联系都是“内部的”,因为没有什么可以“导出”。

更一般地说,很少外部链接导致更快的链接时间,很少的内部链接导致更快的编译时间。当内部和外部表格彼此平衡时,最佳最小值最有可能。但还有很多其他重要的因素需要关注。

我不知道今天的标准是否仍然可以被认为是“好的”:你是否注意到它的建议 - 例如 - 关于迭代器的全部内容,除了今天的标准库呢?

+1

这本书并没有那么糟糕,但我很想看到'第二版',至少从2006年...或更好的2013年:) – fen 2013-02-11 09:46:50

+0

@ fen:true:C++ 11在“优化”领域改变了很多东西,至少大多数现存的C++图书至少要被重新审视。 – 2013-02-11 09:52:37