CまたはC++コードでconst-correctnessを強制することは、保守性に関して良い習慣であるだけでなく、コンパイラーが最適化を実行できるようになる可能性があることを何度も読みました。ただし、完全に反対も読んでいます-パフォーマンスにまったく影響しないこと。
したがって、constの正確さがコンパイラのプログラムのパフォーマンス向上に役立つ例はありますか?
const
の正確さは、_const_cast
_およびmutable
が言語にあり、コードが規則に従って規則を破ることができるため、パフォーマンスを改善できません。これは、C++ 11ではさらに悪化します。C++ 11では、const
データを使用できます。 _std::atomic
_へのポインタであること。これは、コンパイラが他のスレッドによって行われた変更を尊重する必要があることを意味します。
とは言っても、コンパイラが生成するコードを見て、実際に特定の変数に書き込むかどうかを判断し、それに応じて最適化を適用することは簡単です。
つまり、const
の正当性は、保守性に関してgoodのことです。そうしないと、クラスのクライアントがそのクラスの内部メンバーを破壊する可能性があります。たとえば、標準のstd::string::c_str()
を検討してください-const値を返すことができなかった場合は、文字列の内部バッファーでねじ回すことができます!
パフォーマンス上の理由でconst
を使用しないでください。保守性の理由で使用してください。
私の経験では、いいえ
スカラー変数の場合、コンパイラーは値が変更されるたびに決定し、必要な最適化自体を実行できます。
配列ポインターの場合、constの正確性は、潜在的なエイリアシングの問題がある場合に値が実際に一定であることを保証するものではありません。したがって、コンパイラーはconst修飾子のみを使用して最適化を実行することはできません
最適化を検討している場合は、 __restrict__
または特別な関数修飾子/属性: http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html
少し古いですが、まだ適用されます: http://www.gotw.ca/gotw/081.htm その他: http://cpp-next.com/archive/ 2009/08/want-speed-pass-by-value /