【发布时间】:2016-11-23 14:28:42
【问题描述】:
我不时收到此错误消息(不是每次)我编译(编辑:抱歉,我在这里没有说清楚:我实际上是指“重建”)我的混合模式项目。 Visual Studio 告诉我“使用 '-Zm114' 或更高版本的命令行选项重新编译”。原则上没问题,我就照VS说的做。
但目前,这样做有两个问题:
为什么不是每次都发生我进行重建?如果我理解正确,编译器在编译我的项目时内存不足。因此,如果我进行重建,清除所有先前的工作,如果我不进行任何更改,下次它是否也会耗尽内存?
为了安全起见,我已经在这个项目的所有配置中为 Zm 指定了一个值 120(即
Zm120)。为什么我会收到具有此较低值的错误消息?还是建议值 114 只是对 VS 的疯狂猜测?
【问题讨论】:
-
一个 PCH 文件应该只生成一次。如果您遇到此错误,那么您更改了包含在 PCH 中的 .h 文件,当然,这种更改再次触发错误的可能性非零。最终,这可能是一种不好的做法,您应该修剪 PCH 以仅使用永不更改的标头。 Windows.h 很好,像 Boost 这样的库也很好。像 string.h 这样的东西太小了,无法打扰。这不会触发 C3859。
-
@HansPassant 是的,我理解预编译头的概念。但是重建也应该重建预编译的头文件。因此,如果我什么都不改变(没有文件,没有编译器选项)并且只是点击“重建”,错误应该会再次发生,不是吗?
-
至于问题的
/Zm部分,根据here(搜索忽略 /Zm 标志),从 MSVS 2015 开始,不应再使用 Zm 标志(有例外当然)并且应该忽略致命错误 C3859 报告的值。 -
+1 不要使用
/Zm评论。我们刚刚通过删除这些选项来解决我们项目的内存不足问题。看来这可能不适用于<PreferredToolArchitecture>x64</PreferredToolArchitecture> -
今天当我决定使用新的“Clang-tidy”代码分析设置构建我的 DEBUG x64 项目时,我第一次遇到此错误。
标签: c++ visual-studio-2015 compiler-errors precompiled-headers mixed-mode