C言語 volatileの使い方:変数の最適化と注意点
C言語では、volatileキーワードは、変数が実行中に意図せず変更される可能性があることをコンパイラに知らせるために使用されます。そのため、コンパイラはその変数を最適化すべきではなく、毎回メモリから値を再読み込むべきであることを指示します。これにより、変数の値がレジスタにキャッシュされることを防ぎ、プログラムが変数に正しくアクセスできるようになります。
volatileキーワードは通常、マルチスレッドプログラミングやハードウェア関連のプログラミングで使用されます。たとえば、割り込みサービスプログラムでよくvolatile修飾された変数を使用して、割り込みが発生したときに変数の最新値を正しく読み取るようにします。
例:
volatile int flag = 0;
void interrupt_handler()
{
flag = 1;
}
int main()
{
while(!flag)
{
// do something
}
return 0;
}
上記の例では、flag変数はvolatileとして宣言されており、割り込みが発生した際にflagの最新の値を正しく読み取るためです。