volatile是一个类型修饰符。意思是不稳定,易变。
例如:
int i= 10;
int j = i;(1)
int k = i; (2)
这时候编译器会对代码进行优化,在后两句中,i并没有被用作左值。这时候编译器认为i的值没有发生变化。所以一语句认为从内存中读取的i的值。这个值没有被丢掉,继续赋给k,这样就提高了效率。
再看另一个例如:
volatile int i = 10;
int j = i;
int k = i;
volatile告诉编译器i的值是随时可能变化的。每次使用它的时候必须从内从中读取。因而编译器会生成汇编代码重新从i的地址处读取数据赋给k中。