c – 如何解决Visual Studio编译器崩溃

前端之家收集整理的这篇文章主要介绍了c – 如何解决Visual Studio编译器崩溃前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我们有一个大型的Visual Studio 2005 C / Mfc解决方案,1个项目有大约1300个源文件(所以大约650 .h和650 .cpp文件).我们还使用Boost和其他几个库(COM:MS XML,Office).

最近,我已经添加了一些boost :: multi_index的例子来加速事情.这大部分时间都是编译的.但现在,当我正在进行一次完整的(发布)重建时,我会在几个模块中导致编译器崩溃.

Fatal Error C1060: "compiler is out of heap space"

我已经尝试减少包含在预编译的头文件(除了标准的MFC标头除了几乎所有的东西).此外,我已经删除了编译器选项/ Zm200(我们之前需要编译预编译的头文件).

奇怪的是:当我在编译器崩溃后刚刚按F7(构建),构建过程继续没有任何问题(或至少到下一个编译器崩溃,我再次按F7).但是,无需任何休息就能够完成一个完整的构建,这将是件好事.

我可以影响单个模块的构建顺序吗?这样,我可以将“有问题的”模块放在进程的开始(并希望崩溃不只是转移到其他模块).

BTW:一个完整​​的构建需要大约90分钟.

更新:

感谢您的答案.我能够摆脱编译器崩溃并大大减少编译时间.这是我做的:

>我从预编译的头文件删除了所有包含的内容,只是标准的windows / mfc标题是保留的.这迫使我将更多的内容添加到其他模块中,但最终将所有内容都包含在需要的位置.当然这个步骤增加了编译时间,但让我在下一步更有效率.
>我安装了ProFactors IncludeManager的试用版.项目明细视图可以导出到Excel,其中包含在预编译头文件中的瓶颈和候选项可以很快发现.
>大多数编译时间被浪费了一些头文件,其中包含一堆其他头文件(其中包括更多…).我不得不使用前进的声明来摆脱一些令人讨厌的依赖.此外,我将一些类/功能从关键标题移动到自己的模块中.
> What to put in precompiled header? (MSVC)帮助我在预编译头文件获取包含权限.我添加了STL,Boost,Windows标头.然后添加我们自己的(或多或少稳定的,优化的)头,加上资源头文件.
>我重复步骤3和4几次,总是用IncludeManager检查新的候选人.
>步骤1到5使编译时间(释放模式)下降,从90到大约45分钟.
>我禁用了所有的浏览信息的生成,因为我们似乎没有使用它(我找不到任何信息,它是真正好的…).这样做又会造成6分钟的制作过程.
>我将/ MP(多处理器支持)开关添加到C编译器命令.现在重建的时间是22分钟.这一切都是在一台核心PC上完成的.
>我将整个解决方案转移到双核PC.重建项目需要16分钟.
>创建调试版本快5分钟:

> 17分钟在单核机上,
> 11分钟的双核机.

更新2:

以上,我提到“单核机”,实际上是一个较慢的双核机器.

解决方法

如果1300个文件需要很长时间才能编译,那么您将包含太多头文件,这些头文件是不重要的.我猜猜,人们已经将一堆头版文件剪切并粘贴到CPP文件中,而不用考虑他们实际需要的标题,以便在不应该包含它们时加载它们.我也猜测你不是在宣布你应该在哪里上课.

我建议你需要花费一些时间来完成你的项目,并删除不必要的#includes.我怀疑这将解决您的内存不足问题,并会提高编译时间.

猜你在找的C&C++相关文章