visual-studio - 为什么/Gm 是调试配置中的默认选项而不是/MP?

标签 visual-studio visual-studio-2010 visual-c++ compiler-construction compiler-options

在我禁用/Gm 并启用/MP 后,VS2010 上的构建时间显着减少。

我很困惑为什么/Gm 是默认值。我认为/MP 更好。

(如果启用了/Gm,则/MP 不会因为不兼容而被激活。激活的/Gm 比激活的/MP 花费更多的时间。)

最佳答案

在我的头顶上,我可以想到几个原因:

  • 使用 /MP 改进构建时间选项取决于用户可用的处理器数量。 Visual Studio 团队可能认为假设每个人都有多个处理器是不合理的(目前)。 (请注意,当涉及到这样的优化时,超线程不一定算作多处理器。)
  • /MP选项与某些编译器选项和语言功能不兼容。通常,默认值应尽量提高兼容性,即使在必要时也要以牺牲速度为代价。在选择将其设为默认设置时,“更好”并不是评估的唯一标准。您不必打开手册来查看“D9030”或“C2813”编译器警告的含义以及为什么在 VS2008 上编译得很好的项目在 VS2010 上无法编译。

  • documentation更详细地解释了这些问题,甚至包括一些 Guidelines关于如何确定是否启用 /MP选择是针对个别情况的最佳决定。

    任何时候您发现自己必须发布关于是否应该启用某个功能的指南,默认情况下它可能不应该启用。高级用户(不,这不是矛盾的说法:并非每个使用 Visual Studio 的人都是高级用户,因为此名称与相关产品相关),例如您可以自行决定他们是否要启用此选项。

    关于visual-studio - 为什么/Gm 是调试配置中的默认选项而不是/MP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4582288/

    相关文章:

    c++ - 错误 LNK1169 找到一个或多个多次定义的符号

    linux - 是否可以使用 Linux IDE 读取和保存 Visual Studio 2010 解决方案?

    c++ - 为什么下面的代码不起作用?

    c# - UWP 中的 HttpWebRequest (C#)

    visual-studio - 在 Visual Studio 中的 Resharper 之后重新激活多插入符号快捷方式

    visual-studio-2010 - 查找子类和实现

    c++ - 安全线程终止

    c++ - MSVC 编译器/arch :AVX2/fp:fast breaks C++ matrix inversion algorithm

    visual-studio - 如何消除框架源代码调试过程中某些烦人的消息

    C++ 扑克牌类