2009-09-13 3 views

答えて

2

あなたはスピードのために最適化されたコードを生成するために、コンパイルの次のスイッチを使用することができます。

  • /O2
  • /Otを

あなたはほとんどの場合、コードの最適化here.

+0

はい私はそれを認識しています。しかし、私はO2を他のオプションをほとんど使わずに置くことができず、コードをデバッグできないようにしました。私は/ Oxを試しましたが、それを使うために基本的なランタイムチェック(/ RTC)、デバッグ情報フォ​​ーマット、そしてもう1つは覚えていませんでした。 –

0

のためのコンパイラスイッチの参照を見つけることができ、私はあなたがあまりにも心配する必要はありませんと言うでしょう多くのスイッチについて。ほとんどの場合、デフォルトは大丈夫です。 Mahin氏は、すべてのスイッチがどこにあるかを知ることができると指摘していますが、意図しない副作用が生じる可能性があるため注意が必要です。

たとえば、gccコンパイラ(これは私がよく知っている)にはswitch -fomit-frame-pointerがあります。それは大丈夫です。そうすることで、レジスタが解放されます。ただし、プログラムがクラッシュした場合は、スタックトレースは取得されません。したがって、あなたがあなたのプログラムをデバッグしようとしているなら、あなたはこれを望んでいません。他の最適化では、システムに応じて「クレイジー」な副作用が発生する可能性があります。

もう1つのことは、フラグは一般的に彼らが言うことを実行しますが、必ずしも保証されているわけではありません。たとえば、(gccで)再び、/ O3フラグは "より最適化された"コードを生成するはずです。しかしこれは必ずしもそうではなく、/ O2に固執することが推奨されます。

+0

私はアセンブリを学んでいて、最適化されていないコードをチェックしています。引数がなくても5を返す関数は、アセンブリのmov eax、5で2行のコードしか必要としません。私はC++からのコードを参照していますが、20の命令のようになります。スタックに引数をプッシュします。最適化しようとすると、彼が何をするかを見たいと思います。 –