最近,我已经添加了一些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:
以上,我提到“单核机”,实际上是一个较慢的双核机器.