繁体   English   中英

预编译头设计问题

[英]Pre-Compiled Header Design Question

我有使用预编译头的代码。 (之前由其他人完成)

在其中,它们包括几个.h文件。

如果我有使用普通.h文件的类,这些文件当前不在现有的预编译头文件中,那么将它们扔在那里有什么好处呢? 也许编译速度,但我认为它会清理类/标题有点过吗?

对预编译的标题有什么作用和不做什么?

通过从其他源文件中删除这些标头, 不要依赖预编译标头包含的标头进行“代码清理”。 如果你想停止使用PCH,这会造成噩梦。 您始终希望您的依赖项在每个源文件中都是显式的。 只需将它们包含在两个地方 - 它就没有任何危害(假设您有适当的包括防护装置)。

多个源文件包含的头文件是包含在PCH中的良好候选者(特别是如果它很长)。 我发现我并没有太认真地接受这个建议, 只能很少改变的标题放到PCH中。 但是,这取决于您的整体项目结构。 如果您经常进行完整构建,请务必避免此建议。 如果要最小化增量重建中的工作,那么这是一个考虑因素。 根据我的经验,重建PCH的速度相对较快,而且总体编译速度(大多数情况下)远远超过了编译成本。 我不确定所有PCH系统是否足够智能,以确定当PCH中包含的标题发生变化(VC ++)时,不需要重建每个源文件,但是明确地#include每个翻译单元所需的一切必将促进这一(另一个原因是什么你PCH包括你应该依赖)

如果您的编译器支持在编译期间为每个文件显示#include树的选项,这对于识别应包含在PCH中的标题(显示最多的标题)非常有帮助。 我最近在一个正在研究的项目(已经使用PCH,但不是最佳的)上完成了这项工作,并加快了750K系列C ++的构建,从大约1.5小时到15分钟。

将不变系统包含到预编译头中。 这将加快编译速度。 不要将您可能更改的任何自己的头文件放入预编译头中,因为每次更改它们时都必须重建整个预编译头。

这是一个权衡:系统/库标题肯定会出现在PCH中,因为它取决于您的项目中的标题。

我们的项目有大量生成的代码,其更改频率远低于项目的其他部分。 这些标题放在PCH中,因为它们需要花费大量时间来处理每个单独的文件。 如果你改变它们是昂贵的,但是你必须权衡这个成本与在文件中使用它们的更频繁的较小节省。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM