在Visual Studio 2017中使用64位Visual C++工具集
问题描述:
我的(非常大)C++项目已经发展到一个点,在尝试编译我的项目时出现C1060: compiler is out of heap space
错误。在Visual Studio 2017中使用64位Visual C++工具集
我在64位Windows 10机器上编译,但似乎Visual Studio正在使用32位工具集编译我的项目(请参见下面的截图)。
的C1060 help page问我使用64位的工具集,但提供的链接了解如何只用命令行编译时启用了会谈。
是否有任何方法来设置项目属性或Visual Studio 2017中的其他内容,告诉它使用64位编译器工具集(它已经安装在我的机器上)?
答
这是我是如何做到的Visual Studio 2017年使用的x64工具集,按照this答案:
打开用你喜欢的文本编辑器.vcxproj文件,找到这一行:
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
然后加入这紧接着它:
<PropertyGroup>
<PreferredToolArchitecture>x64</PreferredToolArchitecture>
</PropertyGroup>
答案是为Visual Studio 2013,但它也适用于2017年。
附加说明:但事实证明,这并没有真正解决我的问题。 64位工具集耗尽了我机器上的所有内存,并迫使我需要重新启动。当我回滚代码的最新更改时,它使用〜2.8GB编译32位编译器,使用〜4.2GB编译64位编译器(在冻结我的任务管理器之前,最新代码消耗〜6.4GB)我的8GB机器)。我将仔细研究新代码并试图找出为什么需要更多内存。
使*编译器*超过3 GB的地址空间在我看来是一个病态代码库的症状......如果您正确地对其进行模块化,每个翻译单元应该可以管理。 –
@MatteoItalia我同意,大部分代码都在一个翻译单元中,包含很多模板和标题,而且很麻烦。但现在,我没有时间折叠代码库。 – Bernard
由于一些奇怪的原因,当我使用constant_not = std :: bool_constant ;定义了'template时,编译器在我有一个'constant_not {}'。如果我使用constant_not = std :: bool_constant ;将定义更改为'template ,则内存降至300MB。可能是一个编译器错误,但我将不得不做更多的测试。 –
Bernard