C++ 命名空间别名是否会影响大型代码库中的构建时间?(C+;+;)

C++ 命名空间别名是否会影响大型代码库中的构建时间?(C+;+;),c++,namespaces,C++,Namespaces,我在标题中声明了一些(不是很多)名称空间别名。一些头在大型代码库中具有相当高的可见性。几年前,我大部分时间都停止使用它们,但有些仍然在使用。一路上我也移除了一些,但之前/之后我没有时间。在我去移除它们之前,我想知道是否有人进行了测试和计时,以及测试的结果是什么。我不介意它们的存在,除非它们明显影响构建时间。名称空间别名的存在不太可能显著影响构建时间,但是包含多余的头肯定会影响构建时间 > C++编译阶段遭受了所有IO生成的极大影响,以获得磁盘周围散布的多个包含文件的内容,消除这些文件的一大部分

我在标题中声明了一些(不是很多)名称空间别名。一些头在大型代码库中具有相当高的可见性。几年前,我大部分时间都停止使用它们,但有些仍然在使用。一路上我也移除了一些,但之前/之后我没有时间。在我去移除它们之前,我想知道是否有人进行了测试和计时,以及测试的结果是什么。我不介意它们的存在,除非它们明显影响构建时间。

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

<> > C++编译阶段遭受了所有IO生成的极大影响,以获得磁盘周围散布的多个包含文件的内容,消除这些文件的一大部分会提高构建时间。 一个极端的情况是,如果您有大量的预处理/元编程代码,在这种情况下,您可能会达到CPU/内存带宽的界限,补充文件不会有多大影响


需要提醒的是,减少编译时间的最佳方法是消除依赖项,以便增量生成更小。

名称空间别名的存在不太可能显著影响您的生成时间,但是包含多余的头肯定会影响您的生成时间

<> > C++编译阶段遭受了所有IO生成的极大影响,以获得磁盘周围散布的多个包含文件的内容,消除这些文件的一大部分会提高构建时间。 一个极端的情况是,如果您有大量的预处理/元编程代码,在这种情况下,您可能会达到CPU/内存带宽的界限,补充文件不会有多大影响


提醒一下,减少编译时间的最佳方法是消除依赖项,这样增量构建就更小了。

免责声明:我只能从我使用clang编译器的有限经验中说起

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


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

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

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


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

我非常怀疑添加/删除几个using指令是否会以可测量的方式更改生成时间。您的生成时间是多少?我不相信其他人的经验会有多大帮助,因为我们对您的项目大小和依赖性一无所知。@avakar:
使用
指令和
名称空间别名
是两件截然不同的事情。后者不会将名称空间的全部内容转储到另一个名称空间中。@avakar名称查找使用大量优化和高警告设置(每种设置都会花费大量时间,从而影响该百分比)消耗6%的生成(此处)。另外,名称空间别名!=<代码>使用名称空间@littleadv完整构建为x86_64生成大约1GB的链接和剥离二进制文件。重用率很高,而且许多程序都是重模板的。构建时间很长,但我最近没有测量。我非常怀疑添加/删除一些using指令会以可测量的方式改变构建时间。您的构建时间是多少?我不相信其他人的经验会有多大帮助,因为我们对您的项目大小和依赖性一无所知。@avakar:
使用
指令和
名称空间别名
是两件截然不同的事情。后者不会将名称空间的全部内容转储到另一个名称空间中。@avakar名称查找使用大量优化和高警告设置(每种设置都会花费大量时间,从而影响该百分比)消耗6%的生成(此处)。另外,名称空间别名!=<代码>使用名称空间@littleadv完整构建为x86_64生成大约1GB的链接和剥离二进制文件。重用率很高,而且许多程序都是重模板的。构建时间很长,但我最近没有测量。好的,谢谢你的回答(+1)。在我的例子中,我已经做了一些明显的事情来减少构建时间(不幸的是)。好的,谢谢你的回答(+1)。在我的例子中,我已经做了一些明显的事情来减少构建时间(很不幸)。+1谢谢你,阿瓦卡。这详细说明了操作的复杂性。+1谢谢你,阿瓦卡。这详细说明了操作的复杂性。