Подтвердить что ты не робот

Почему параметр /Gm по умолчанию используется в конфигурации отладки в отличие от/MP?

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

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

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

4b9b3361

Ответ 1

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

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

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

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

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