2009-07-01 10 views

答えて

1

揮発性は、基本的に、適用している "オブジェクト"に対して最適化を実行しないようにコンパイラに指示します。

これは、オブジェクトがプログラムの範囲外で変更できる場合に便利です。

1つの例(および他にもあります)には、組み込みシステムがあります。たとえば、メモリマップされたキーボードを備えたデバイスがあるとします。ユーザーがキーを押すと、そのキーのASCIIコードがメモリ位置0xff00(たとえば)に表示されます。 、その後、

char *kbdata = 0xff00; 

あなたが押されるキーを待ちたい時はいつでも、あなたはポーリングすることができます:

だから、コードで始まる

char key = *kbdata; 
while (key == 0) 
    key = *kbdata; 

ここでの唯一の問題はということですコンパイラは、コード中の何も*kbdataを変更していないので、コードが機能しなくなるようにアクセスを最適化することができます。ほとんどの場合、キーに*kbdataがロードされ、その後無限ループに入ります。

volatileをkbdataと指定すると、コンパイラはアクセスを最適化しようとしないため、コードが期待どおりに機能するはずです。