コンパイラオプションの /Ox と /O2 の違いは何ですか?
質問
マイクロソフトの C++ コンパイラ (
cl.exe
Visual Studio に含まれるもの) が提供する
いくつかの最適化スイッチ
. それらのほとんどの違いは自明なようですが、以下の違いは私にはわかりません。
/O2
(最大限の速度を得るためにコードを最適化する) と
/Ox
(完全最適化)を選択します。
を読み込んでみましたが
ドキュメント
を読んでみました。
/Ox
オプションのドキュメントを見ると、このスイッチもサイズではなく、最大速度の最適化を有効にすることが確認できるようです。
その
/Ox
コンパイラオプションは、小さいサイズよりも実行速度を優先するコードを生成します。
しかし、特に、"Remarks"セクションにある次の文が私の目を引いた。
一般に、以下のように指定します。
/O2
(速度の最大化)の代わりに/Ox
.
そこで質問なのですが
なぜ一般的に
/O2
よりも
/Ox
?
後者のオプションは、予期せぬバグやその他の予期せぬ動作を引き起こすことが知られている特定の最適化を可能にするのでしょうか?単に、得られる最適化の量が追加のコンパイル時間に見合わないということでしょうか?それとも、以下の事実から生じる、まったく意味のない推奨事項なのでしょうか?
/O2
が
デフォルト
というオプションはVSにありますか?
どのように解決するのですか?
アーシャの回答 は、Visual Studio 2005に関するブログ記事を引用しており、かなり古いものです。
最新版のドキュメントはこちらでご覧になれます。
-
/Ox
: https://msdn.microsoft.com/en-us/library/59a3b321.aspx -
/O2
: https://msdn.microsoft.com/en-us/library/8f8h5cxt.aspx
それらによると
-
/Ox
→/Og /Oi /Ot /Oy /Ob2
-
/O2
→同じですが、さらに追加/Gs /GF /Gy
-
/GF
重複した文字列を削除します。 -
/Gy
する 機能レベルリンク
-
この他にも、以下のようなものがあります。
/GS-
これはスタック周りのセキュリティチェックをオフにするもので、 パフォーマンスに大きな打撃を与える可能性があります (
MS docs for /GS
).
これまで通り、特定のアプリケーションをベンチマークする必要があります。
関連
-
[解決済み】Visual C++で "Debug Assertion failed "の原因となる行を見つける。
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み] gdbを使用してもデバッグシンボルが見つからない
-
[解決済み] 変数サイズのオブジェクトが初期化されないことがある c++
-
[解決済み] explicit キーワードの意味は?
-
[解決済み] C#の正しいバージョン番号を教えてください。
-
[解決済み] コピーアンドスワップ慣用句とは?
-
[解決済み] const int*、const int * const、int const *の違いは何ですか?
-
[解決済み】C/C++の"-->"演算子とは何ですか?
-
[解決済み] Intel CPU の _mm_popcnt_u64 で、32 ビットのループカウンターを 64 ビットに置き換えると、パフォーマンスが著しく低下します。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] error: 'ostream' does not name a type.
-
[解決済み] string does not name a type Errorが発生するのはなぜですか?
-
[解決済み】デバッグアサーションに失敗しました。C++のベクトル添え字が範囲外
-
[解決済み】cc1plus:エラー:g++で認識されないコマンドラインオプション"-std=c++11"
-
[解決済み】Visual C++で "Debug Assertion failed "の原因となる行を見つける。
-
[解決済み】浮動小数点数の乱数生成
-
[解決済み】 while(cin) と while(cin >> num) の違いは何ですか?)
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み】演算子のオーバーロード C++; <<操作のパラメータが多すぎる
-
[解決済み】エラー。引数リストに一致するコンストラクタのインスタンスがない