がVolatileキーワードを使用する必要がある最適化コンパイラには、何が実行されますか? C++で考える
を言う揮発性修飾子は「この が変更されるとき、あなたが知っていることはありません」 コンパイラに指示し、その変数の安定性 に基づく任意の 最適化を行ってから コンパイラを防ぐことができます。
コンパイラが実行する(キャッシング以外の)最適化にはどのようなものがありますか?
がVolatileキーワードを使用する必要がある最適化コンパイラには、何が実行されますか? C++で考える
を言う揮発性修飾子は「この が変更されるとき、あなたが知っていることはありません」 コンパイラに指示し、その変数の安定性 に基づく任意の 最適化を行ってから コンパイラを防ぐことができます。
コンパイラが実行する(キャッシング以外の)最適化にはどのようなものがありますか?
もっとも基本的な最適化は、変数の値をCPUレジスタに格納することです。 volatileを宣言すると、レジスタ内のキャッシュされたコピーを使用する代わりに、コードジェネレータが常にメモリから値をリロードします。
一般的な最適化は、読み取りまたは書き込み操作の並べ替えです。これによりパイプライン操作の並列処理が向上し、「ストール」(コンパイラがhazardsを防ぐために待機またはノーオプを注入する)が発生する可能性があります。
変数がvolatileとマークされていると、メモリバリアを使用してこのような操作の並べ替えを防止できます。どのように実装するかは、実装に依存します。 Microsoft C++コンパイラの機能を確認するには、MSDN reference on volatile
を参照してください。
「volatile」資格の使用によって防止される最適化について具体的に質問していますか? –