Visual Studio for C++プロジェクトで[マルチプロセッサコンパイル]オプションを使用するときに注意する必要のある欠点、副作用、またはその他の問題はありますか?または、質問を別の言い方で言うと、Visual Studioでこのオプションがデフォルトでオフになっているのはなぜですか?
互換性のないオプションと言語機能
/MP
オプションは、一部のコンパイラオプションおよび言語機能と互換性がありません。互換性のないコンパイラオプションを/MP
オプションと一緒に使用すると、コンパイラは警告D9030を発行し、/MP
オプションを無視します。互換性のない言語機能を使用する場合、コンパイラはエラーC2813を発行し、現在のコンパイラ警告レベルオプションに応じて終了または続行します。
注:
ほとんどのオプションは互換性がありません。許可されている場合、同時に実行されるコンパイラーは、コンソールまたは特定のファイルに同時に出力を書き込むためです。その結果、出力が混ざり合って文字化けします。場合によっては、オプションの組み合わせによってパフォーマンスが低下することがあります。
また、/MP
と互換性のないコンパイラオプションと言語機能を一覧表示する表を提供します。
#import
プリプロセッサディレクティブ(タイプライブラリのタイプをC++クラスに変換してから、それらのクラスをヘッダーファイルに書き込みます)/E
、/EP
(プリプロセッサ出力を標準出力(stdout)にコピーします)/Gm
(インクリメンタル再構築を有効にします)/showIncludes
(インクルードファイルのリストを標準エラー(stderr)に書き込みます)/Yc
(プリコンパイル済みヘッダーファイルを書き込みます)
Visual Studioでは、これらの他のオプションをデフォルトで無効にする(およびデフォルトで/MP
を有効にする)代わりに、これらの機能を手動で無効/防止し、/MP
を有効にします。
私たちの経験から、見つかった主な問題は次のとおりです。
ただし、上記は解決できる構成の問題です。それ以外の場合は、ビルドが高速化されるため、有効にする必要があります。
マルチプロセッサコンパイルは他の多くのコンパイルオプションと互換性がなく、システムリソースの使用率も高いためです。それが彼にとって価値があるかどうかを決めるのは開発者次第です。完全なドキュメントはここにあります: http://msdn.Microsoft.com/en-us/library/bb385193.aspx