volatile 型修飾子

volatile 修飾 子は、データ・オブジェクトに対するメモリー・アクセスの整合性を維持します。揮発性オブジェクトは、 それらの値が必要になるたびにメモリーから読み取られ、変更されるたびにメモリーへ書き戻されます。volatile 修飾子は、コンパイラーの制御または検出以外の方法 (システム・クロックによって更新された変数など) で、値を変更できるデータ・オブジェクトを宣言します。その結果、コンパイラーは、オブジェクトを参照するコードに対して 特定の最適化を適用しないよう通知されます。

volatile で修飾された任意の左辺値の式にアクセスすると、副次作用が生じます。 副次作用とは、実行環境の状態が変化するということです。

オブジェクト型 "pointer to volatile" への参照は最適化されますが、それが指す 先のオブジェクトへの参照を最適化することはできません。 "pointer to volatile T" 型の値を "pointer to T" 型のオブジェクトに割り当てるためには、明示的なキャストを使用しなければなりません。 volatile オブジェクトの有効な使用法は、以下のとおりです。

volatile int * pvol;
int *ptr;
pvol = ptr;               /* Legal */
ptr = (int *)pvol;        /* Explicit cast required */

C シグナル処理関数は、変数が volatile として宣言されていれば、型 sig_atomic_t の変数に値を保管できます。 これは、シグナル処理関数が静的ストレージ期間を使用した変数にアクセスできないという規則の 例外です。

関連参照

IBM Copyright 2003