将 /Zm 标志传递给 msbuild

Passing /Zm flag to msbuild

提问人:vam 提问时间:11/14/2023 更新时间:11/15/2023 访问量:27

问:

我面临间歇性问题:- 。为什么我们会遇到这样的问题? 根据文档:- 这里 & 这里 ,通过使用我们可以 控制内存分配。C1060: compiler is out of heap space\Zm<factor>

作为我们构建的一部分,我注意到我们没有传递传递的编译器标志。我不能在构建命令中传递该标志。那么如果我们不通过它,默认的内存消耗会怎样呢?如果我们想使用,我们应该在链接阶段或编译阶段传递它吗?是否必须传递因子值,或者我们可以根据上面后一个论坛中的文档信息默认使用 100MB 传递?\Zm\Zm\Zm\Zm<factor>\Zm

visual-studio 编译器错误 msbuild

评论

0赞 Jonathan Dodds 11/14/2023
你使用的是 Visual Studio 吗?打开项目属性,将“配置”更改为“所有配置”,将“平台”更改为“所有平台”,在“配置属性”下> C/C++ -> 命令行“中的”其他选项“中添加您的选项。\Zm
0赞 Jonathan Dodds 11/14/2023
链接到的文档 /Zm(指定预编译标头内存分配限制)显示“默认预编译标头缓冲区为 75 MB”。提供系数 100 >以增加缓冲区。使用 ,例如,将缓冲区从 75 MB 增加到 105 mb。140\Zm140
0赞 Bowman Zhu-MSFT 11/15/2023
@vam 你可以看看我的回答。:)

答:

0赞 Bowman Zhu-MSFT 11/15/2023 #1

那么如果我们不传递它,默认的内存消耗会发生什么 ?

答案是它将是 75MB。

证据:

/Zm 的备注

enter image description here

如果只在不使用因子的情况下使用,则默认为 ,这意味着它使用默认分配,相当于默认缓冲区大小的 100%,即 75 MB。因此,单独使用不会将内存限制增加到默认值之外。若要增加限制,需要指定大于 100 的系数,例如默认分配的两倍。\Zm\Zm100\Zm\Zm200

如果我们想使用 \Zm,我们应该在链接阶段传递它或 编译阶段?

它应该在编译阶段使用,而不是在链接阶段使用,因为它旨在管理预编译头文件和编译源文件的内存分配。

是必须传递因子值 \Zm 还是我们可以传递 \Zm 默认使用 100mb,根据后者中的文档信息 上面的论坛?

我认为答案是否定的。因为添加或不添加都可能导致 C1060 问题。你可以看看这个:

如何修复 C1060

评论

0赞 vam 11/17/2023
因此,只是在没有任何因素的情况下通过并且根本不通过会充当相同的行为吗?就我而言,我是否需要将因子增加到 200 才能解决?/Zm