可以使用哪些技术来加快c++编译时间?
这个问题出现在一些关于Stack Overflow问题c++编程风格的评论中,我很有兴趣听听有什么想法。
我看到过一个相关的问题,为什么c++编译要花这么长时间?,但这并没有提供很多解决方案。
可以使用哪些技术来加快c++编译时间?
这个问题出现在一些关于Stack Overflow问题c++编程风格的评论中,我很有兴趣听听有什么想法。
我看到过一个相关的问题,为什么c++编译要花这么长时间?,但这并没有提供很多解决方案。
当前回答
来自微软:https://devblogs.microsoft.com/cppblog/recommendations-to-speed-c-builds-in-visual-studio/
具体建议包括:
项目使用PCH吗 是否包含常用的系统、运行时和第三方头文件 PCH 在PCH中包含很少改变项目特定的头 不包括经常变化的头 是否定期审核PCH以保持产品流失的最新情况 使用/ mp 是否移除/Gm以支持/MP 是否解决与#import和use /MP的冲突 是否使用连接器开关/增量 使用链接器开关/调试:fastlink 是否考虑使用第三方构建加速器
其他回答
一旦您应用了上面所有的代码技巧(前向声明、将公共头中的头包含减少到最低限度、使用Pimpl将大多数细节推入实现文件中……),并且在语言方面没有任何其他收获,那么考虑您的构建系统。如果您使用Linux,请考虑使用distcc(分布式编译器)和ccache(缓存编译器)。
第一个函数distcc在本地执行预处理器步骤,然后将输出发送到网络中第一个可用的编译器。它要求网络中所有配置节点的编译器和库版本相同。
后者ccache是编译器缓存。它再次执行预处理器,然后检查内部数据库(保存在本地目录中),该预处理器文件是否已经用相同的编译器参数编译过。如果是,它只弹出编译器第一次运行时的二进制文件和输出。
这两种方法可以同时使用,这样如果ccache没有本地副本,它可以通过网络将副本发送到带有distcc的另一个节点,或者它可以只注入解决方案而不进行进一步处理。
来自微软:https://devblogs.microsoft.com/cppblog/recommendations-to-speed-c-builds-in-visual-studio/
具体建议包括:
项目使用PCH吗 是否包含常用的系统、运行时和第三方头文件 PCH 在PCH中包含很少改变项目特定的头 不包括经常变化的头 是否定期审核PCH以保持产品流失的最新情况 使用/ mp 是否移除/Gm以支持/MP 是否解决与#import和use /MP的冲突 是否使用连接器开关/增量 使用链接器开关/调试:fastlink 是否考虑使用第三方构建加速器
我有个关于使用内存驱动器的主意。事实证明,对于我的项目来说,这并没有太大的区别。但它们仍然很小。试一试!我很想知道这有多大帮助。
更大的内存。
有人在另一个回答中谈到了RAM驱动器。我用80286和Turbo c++(显示年龄)做到了这一点,结果是惊人的。就像机器崩溃时数据丢失一样。
如果您有一个多核处理器,Visual Studio(2005及以后版本)和GCC都支持多处理器编译。当然,如果你有硬件,这是可以实现的。