Visual C++ の _ReadWriteBarrier 組み込みのドキュメントで、次のテキストを見ています。
以前のバージョンの Visual C++ コンパイラでは、_ReadWriteBarrier および _WriteBarrier 関数はローカルでのみ適用され、呼び出しツリーの上位の関数には影響しませんでした。Visual C++ 2005 以降では、これらの関数は呼び出しツリー全体に適用されます。
関数内でバリアが何をするかは理解していますが、「呼び出しツリーの上」は、関数foo()
を呼び出す関数がバリアを含むbar()
かどうかを知ることができることを意味しているようです。bar()
これを可能にするために VC2005 で実際に変更されたものは何ですか... 呼び出し規約/ABI、コンパイラによって行われるいくつかのグローバル分析、または何ですか?