最適化における定数の正確性
定数の正確性はコードの可読性を高め、エラーを削減しますが、一般的な考えに反してパフォーマンスへの影響は限定的です.
const へのポインターまたは const の参照を宣言するだけでは、コンパイラーに追加の最適化の機会は提供されません。 const 宣言は、スコープ内で識別子がどのように使用されるべきかを指定するだけであり、基になるオブジェクトが不変であることを保証するものではありません。
例:
<code class="c">int foo(const int *p) { int x = *p; bar(x); x = *p; return x; }</code>
const 宣言を使用しても、コンパイラはp が bar() によって変更されないままであるとは想定できません。これは、bar() がアクセスできるグローバル整数を指している可能性があるためです。コンパイラが foo() と bar() について十分な知識を持っており、bar() が p を変更しないことを証明できる場合、そのような最適化は const なしでも実現できます。
同様に、const 宣言自体も同様です。呼び出し元関数の最適化を支援しません:
<code class="c">int x = 37; foo(&x); printf("%d\n", x);</code>
Foo() は x を変更できるため、コンパイラーが const のみで最適化することは不可能になります。
const の主な利点は次のとおりです。最適化ではなくエラー防止。これはスコープ内での識別子の使用方法を制限しますが、まだ確認できないことはコンパイラに通知しません。
ポインタと参照
ポインタと参照は、にもかかわらず異なります。同様のメモリ内表現を持っています。ポインタは変数のアドレスを格納しますが、参照はエイリアスとして機能し、基礎となるオブジェクトへの直接アクセスを提供します。さらに、参照を NULL にすることはできませんが、ポインタは NULL にすることができます。
以上がConst-Correctness は最適化パフォーマンスを向上させますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。