Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在大型C++;项目 我想减少一个大型C++项目的编译时间。 我尝试使用预编译的头文件、接口等。 但在继续之前,我想知道是否有任何工具可以帮助检测编译时间为何如此之长。 有人建议使用pc lint,我会试一试。 但是,如果有其他工具可以分析编译时并讨论任何提高编译速度的提示,请告诉我。 提前谢谢 环境:微软Visual Studio C++ 2008或2010。< /P> < P>我不知道有任何工具来改善编译时间,但很少有人工补救,我可以建议(考虑这是注释): 让#在每个头文件中包含防护,以便多个 包含不会产生任何问题 减少成员函数体,直接放入内联函数体 进入头文件;只要有他们的声明 检查是否没有不必要的模板函数和类; 请记住,默认情况下,tempaltes变为inline。太多 模板/元编程会导致大量编译时间 如果#define的数量过高,那么它们将 增加预处理阶段,最终增加 编译时间_C++_Visual Studio_Visual Studio 2008_Compiler Optimization - Fatal编程技术网

如何在大型C++;项目 我想减少一个大型C++项目的编译时间。 我尝试使用预编译的头文件、接口等。 但在继续之前,我想知道是否有任何工具可以帮助检测编译时间为何如此之长。 有人建议使用pc lint,我会试一试。 但是,如果有其他工具可以分析编译时并讨论任何提高编译速度的提示,请告诉我。 提前谢谢 环境:微软Visual Studio C++ 2008或2010。< /P> < P>我不知道有任何工具来改善编译时间,但很少有人工补救,我可以建议(考虑这是注释): 让#在每个头文件中包含防护,以便多个 包含不会产生任何问题 减少成员函数体,直接放入内联函数体 进入头文件;只要有他们的声明 检查是否没有不必要的模板函数和类; 请记住,默认情况下,tempaltes变为inline。太多 模板/元编程会导致大量编译时间 如果#define的数量过高,那么它们将 增加预处理阶段,最终增加 编译时间

如何在大型C++;项目 我想减少一个大型C++项目的编译时间。 我尝试使用预编译的头文件、接口等。 但在继续之前,我想知道是否有任何工具可以帮助检测编译时间为何如此之长。 有人建议使用pc lint,我会试一试。 但是,如果有其他工具可以分析编译时并讨论任何提高编译速度的提示,请告诉我。 提前谢谢 环境:微软Visual Studio C++ 2008或2010。< /P> < P>我不知道有任何工具来改善编译时间,但很少有人工补救,我可以建议(考虑这是注释): 让#在每个头文件中包含防护,以便多个 包含不会产生任何问题 减少成员函数体,直接放入内联函数体 进入头文件;只要有他们的声明 检查是否没有不必要的模板函数和类; 请记住,默认情况下,tempaltes变为inline。太多 模板/元编程会导致大量编译时间 如果#define的数量过高,那么它们将 增加预处理阶段,最终增加 编译时间,c++,visual-studio,visual-studio-2008,compiler-optimization,C++,Visual Studio,Visual Studio 2008,Compiler Optimization,我喜欢的一种方法是查看一些源代码的预处理器输出——只是从编译器的角度阅读其中的一些,而不是从某种程度上抽象的表示形式,即#include。很可能您会发现一些大块的include/libraries,您不需要,也不一定知道依赖关系/include的存在(或需要)。在此基础上,决定可以删除哪些依赖项。即使您的依赖关系都是正确的,大输出也可以建议您如何将较大的模块划分为较小的部分。C++不是模块化的(但),编译瓶颈通常是由于包含问题;这就是在不需要文件时使用包含太多文件。这也有可能是目前需要的,但通过

我喜欢的一种方法是查看一些源代码的预处理器输出——只是从编译器的角度阅读其中的一些,而不是从某种程度上抽象的表示形式,即
#include
。很可能您会发现一些大块的include/libraries,您不需要,也不一定知道依赖关系/include的存在(或需要)。在此基础上,决定可以删除哪些依赖项。即使您的依赖关系都是正确的,大输出也可以建议您如何将较大的模块划分为较小的部分。

C++不是模块化的(但),编译瓶颈通常是由于包含问题;这就是在不需要文件时使用包含太多文件。这也有可能是目前需要的,但通过一些简单的重新设计可能会变得多余

  • 要检测多余的include,您可以检查一下,唯一的问题是它在Clang之上工作,所以您需要在那里进行一些设置
  • 否则,您需要检查代码,特别是标题
由于该工具是自给自足且有文档记录的,所以让我对审查过程进行一些扩展

  • 任何包含多个
    #include
    的标题都是高度可疑的
  • 相反,如果您的源文件中塞满了各种类型和函数,并且只有几个include,则可能意味着其中一个头带来了太多的内容
  • 如果您不知道需要什么,不需要什么,以及如何删除多余的标题,我建议您阅读;如果您不知道Pimpl是什么,请阅读。但我建议谨慎,Pimpl有运行时间和维护成本,所以只有在真正必要时才使用它。就我个人而言,我绝对会在您交付给第三方的库的公共标题中推荐它(ABI兼容性),否则请尽量避免使用它

    如果手动检查不是您的专长,您可以为每个头生成预处理器输出(不要太担心源文件),并检查较大的输出。

    您可以查看
    基本上,它将所有
    .cpp
    文件包含到一个.cpp文件中,并且只编译一个文件。 我在一个大项目上进行了测试,结果非常有效。
    它之所以有效,是因为当它一次包含所有头/cpp而不是每个cpp时,使用的I/O要少得多

    现在我们不再使用unity builds了,因为我们都升级了SSD硬件,它们太棒了


    这里有一个关于Unity builds的相关SO问题:

    不是直接的答案,但您确实打开了并行构建?一般评论是不要包含您不需要的标题。构建时最糟糕的事情是一个名为includes.hpp的头文件,它包含您需要的所有可能的头文件。我已经看到了重新编译时的膨胀。硬件升级怎么样?确保你有一个合适的构建系统,只重建那些已经更改的文件。然后您可以使用PIMPL之类的工具来最小化耦合和编译依赖性。@David:我一直都在这样做。。。每个标题都配有一个“#ifndef foo\n#define foo…”#当然是endif。我不应该吗?+1-关于Unity Builds的评论非常有趣-下次我碰到一个低级标题时,我必须尝试一下。至于SSD,我玩得太晚了:在HDD崩溃后,我刚刚将它添加到笔记本电脑上——速度的提高建议我应该将编译框改为SSD。在你的评论之后,我肯定会做出改变,一旦容量稍微高一点/价格稍微便宜一点。