6

現在、次のプリプロセッサ定義とさまざまな最適化設定を使用しています。

  • WIN32_LEAN_AND_MEAN
  • VC_EXTRALEAN
  • NOMINMAX
  • _CRT_SECURE_NO_WARNINGS
  • _SCL_SECURE_NO_WARNINGS
  • _SECURE_SCL=0
  • _HAS_ITERATOR_DEBUGGING=0

私の質問は、VS C++ (2008、2010) からのリリース モードビルドを可能な限り高性能にするために、他の SOers が使用、追加、定義するものは何ですか?

ところで、私は PGO などを試しましたが、少しは役に立ちますが、GCC と同等になるものは何もありません。また、ストリームを使用していません。C++ は C に似ているが、テンプレートと STL アルゴリズムを利用しています。等

現状では、02 を使用して Linux (2.6+ カーネル) を実行している同等の x86 マシンで GCC が生成するものと比較すると、非常に単純なコード セグメントのパフォーマンスは見劣りします。

補足:多くの問題は、MS が提供する STL バージョン (Dinkum) に直接関係していると思います。VS C++ で STLPort などを使用した経験について詳しく教えてください。

4

1 に答える 1

1

次のものを含める方法がわかりません:

_CRT_SECURE_NO_WARNINGS
_SCL_SECURE_NO_WARNINGS

..より優れた、またはよりパフォーマンスの高いビルドを提供します。あなたがしているのは、MS CRT の非推奨関数に関する警告を無効にすることだけです。自分が何をしているのかを知っていて、プラットフォームにとらわれないコードが必要なためにこれを行っている場合は、そうでなければ再考します。

UPDATE : さらに、コンパイラはそれほど多くのことしかできません。コンパイルとリンクのフェーズからわずかな割合 (もしあれば) の利益を求めようとするよりも、既存のホットスポットを計測して修正した方が、よりパフォーマンスの高いコードが得られると思います。

UPDATE2 : _HAS_ITERATOR_DEBUGGING は、 MSDNによると、とにかくリリース ビルドをコンパイルするときに使用できません。WIN32_LEAN_AND_MEAN VC_EXTRALEAN(そしておそらくNOMINMAX、パフォーマンスがこれを無効にする主な理由ではありませんが) パフォーマンスがいくらか向上する可能性がありますが、残りのすべてには疑わしい価値があります。正確で高速なコードを優先する必要があります (多分- そして私は多分強調します) わずかに高速ですが、リスクが発生しやすいコードです。

于 2010-03-17T13:33:35.847 に答える