名称空间别名会影响大型代码库中的构建时间吗?(c++)

Do namespace aliases affect build times in large codebases? (C++)

本文关键字:时间 构建 c++ 别名 空间 影响 代码 大型      更新时间:2023-10-16

我在头文件中声明了一些(不是很多)名称空间别名。有些头文件在大型代码库中具有相当高的可见性。我几年前就停止使用它们了,但有些仍然存在。我也移除了其中一些,但我没有计算前后的时间。在我移除它们之前,我想知道是否有人测试并计时,测试的结果是什么。我不介意它们的存在,除非它们明显地影响了构建时间。

名称空间别名的存在不太可能显著影响构建时间,但是包含多余的头文件肯定会影响构建时间。

c++编译阶段为获取分散在磁盘上的多个包含文件的内容而生成的所有IO都受到很大的影响,消除这些文件的很大一部分应该可以改善构建时间。

如果你有大量的预处理/元编程代码,在这种情况下,你可能会达到CPU/内存带宽限制,补充文件不会有太大的影响。

作为一个提醒,减少编译时间的最好方法是消除依赖,这样增量构建就会更小。

免责声明:我只能从我使用clang编译器的有限经验来看。

在clang中,命名空间别名定义不会导致源命名空间中的所有符号被复制到当前声明上下文(即作用域)。相反,编译器会在上下文中发出一个命名空间别名声明记录。

换句话说,符号表的大小只增加1,因此,不命名别名的查找只受到轻微影响。当然,如果使用别名,将执行两个查找——一个查找别名声明,另一个查找目标名称空间。