if (var != X)
var = X;
それは賢明ですか?コンパイラは常に if ステートメントを最適化しますか? if ステートメントの恩恵を受けるユースケースはありますか?
var
volatile 変数の場合はどうなりますか?
volatile 変数は両方の言語で異なるセマンティクスを持つため、C++ と Java の両方の回答に興味があります。また、Java の JIT コンパイルも違いを生む可能性があります。
if ステートメントは、常に var を X で上書きした場合には発生しない分岐と追加の読み取りを導入するため、悪いことです。一方、var == X
この最適化を使用すると、読み取りのみを実行し、書き込みは実行しないため、キャッシュに影響を与える可能性があります。明らかに、ここにはいくつかのトレードオフがあります。実際にどのように見えるか知りたいです。誰かがこれについてテストを行いましたか?
編集:
マルチプロセッサ環境でどのように見えるかについて、私は主に興味があります。些細な状況では、変数を最初にチェックすることにあまり意味がないように思われます。ただし、プロセッサ/コア間でキャッシュの一貫性を維持する必要がある場合は、追加のチェックが実際に役立つ場合があります。どれほど大きな影響を与えることができるのだろうか?また、プロセッサはそのような最適化自体を行うべきではありませんか? var == X
もう一度値を割り当てても、X
キャッシュが「汚れる」ことはありません。しかし、これに頼ることができますか?