Почему / Gm является параметром по умолчанию в конфигурации отладки, а не / MP? - PullRequest
15 голосов
/ 03 января 2011

После того, как я отключил / Gm и включил / MP, время сборки на VS2010 значительно сокращается.

Я не понимаю, почему / Gm является значением по умолчанию.Я думаю, что / MP лучше.

(Если / Gm включен, / MP не активирован из-за несовместимости. Активировано / Gm занимает больше времени, чем Активировано /MP.)

1 Ответ

17 голосов
/ 03 января 2011

Вдохновляясь, я могу подумать о нескольких причинах:

  1. Улучшение времени сборки с опцией /MP зависит от количества процессоров пользователяесть в наличии.Команда Visual Studio, вероятно, не считает разумным (пока) предполагать, что каждый имеет несколько процессоров.(Обратите внимание, что HyperThreading не обязательно считается несколькими процессорами, когда речь идет об оптимизации, подобной этой.)

  2. Параметр /MP несовместим с некоторыми параметрами компилятора и языковыми функциями.Как правило, значения по умолчанию должны пытаться максимизировать совместимость, даже при необходимости за счет скорости.То, что что-то «лучше», - не единственный критерий, который оценивается при выборе значения по умолчанию.Вам не нужно взламывать руководство, чтобы увидеть, что означают предупреждения компилятора «D9030» или «C2813», и почему ваш проект, который скомпилирован очень хорошо на VS2008, не скомпилируется на VS2010.

Документация объясняет эти проблемы более подробно и даже включает некоторые Рекомендации о том, как определить, включена ли опция /MPлучшее решение для отдельных случаев.

Каждый раз, когда вам приходится публиковать рекомендации о том, должна ли функция быть включена, ее, вероятно, не следует включать по умолчанию.Опытные пользователи (и нет, это не оксюморон: не все, кто использует Visual Studio, являются опытными пользователями, поскольку это обозначение относится к рассматриваемому продукту), например, вы можете сами решить, хотят ли они включить эту опцию.

...