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中。