MSVC++ 2010で/GS
(バッファセキュリティチェックを有効にする)をコンパイルするとランタイムパフォーマンスに無視できない影響を及ぼすようになったことに、 。誰にもこの経験がありましたか?MSVC++の "Buffer Security Check/GS"コンパイラオプションの理解
大きな科学的スタイルのアプリケーション(メッシュ生成ライブラリ)の場合、/GS-
でコンパイルすると、テストスイートのいくつかの大きなベンチマークで実行時間がほぼ10% =ランタイムの1秒分)。 /GS
は、MSVC++ 2010のすべての最適化レベルでデフォルトでオンになっています。
私はこれまであまり注目を払っていなかったことを認めなければなりません。 。オンラインdocumentationは、ストリングバッファーについて広範に話しているようですが、string
またはchar[]
バッファーを使用しないため、何かが欠けているはずです。 (オンラインドキュメントから)
この段落は、私が見ているパフォーマンスの低下は少し珍しいであることを示しているようだ:
アプリケーションで セキュリティチェックを使用するため、パフォーマンスのトレードオフが なされなければなりません。 Visual C++コンパイラチーム はパフォーマンスを小さくすることに重点を置いていました。 ほとんどの場合、 のパフォーマンスは2%より多く低下することはありません。 実際には、 の経験では、高性能サーバーを含む アプリケーションのほとんどが パフォーマンスに影響していないことがわかりました。
もちろん、私はそれをオフにしてより速いコードを得ることができますが、私がそれをする前にその意味を理解したいと思います。
「ハイパフォーマンス・サーバー・アプリケーション」を含む多くのコードがありますが、I/Oバウンドまたはメモリにバインドされています。余分な小切手を挿入することは、そのようなコードでは実質的に無料です。 – MSalters
Michael Howardには、Brayの2002年の記事以降に/ GSサポートに追加されたもののいくつかが記載されています。http://msdn.microsoft.com/en-us/magazine/cc337897.aspx –