2011-07-04 4 views
3

Volatileキーワードを使用する必要がある最適化コンパイラには、何が実行されますか? C++で考える

を言う揮発性修飾子は「この が変更されるとき、あなたが知っていることはありません」 コンパイラに指示し、その変数の安定性 に基づく任意の 最適化を行ってから コンパイラを防ぐことができます。

コンパイラが実行する(キャッシング以外の)最適化にはどのようなものがありますか?

+0

「volatile」資格の使用によって防止される最適化について具体的に質問していますか? –

答えて

9

もっとも基本的な最適化は、変数の値をCPUレジスタに格納することです。 volatileを宣言すると、レジスタ内のキャッシュされたコピーを使用する代わりに、コードジェネレータが常にメモリから値をリロードします。

3

一般的な最適化は、読み取りまたは書き込み操作の並べ替えです。これによりパイプライン操作の並列処理が向上し、「ストール」(コンパイラがhazardsを防ぐために待機またはノーオプを注入する)が発生する可能性があります。

変数がvolatileとマークされていると、メモリバリアを使用してこのような操作の並べ替えを防止できます。どのように実装するかは、実装に依存します。 Microsoft C++コンパイラの機能を確認するには、MSDN reference on volatileを参照してください。

関連する問題