Volatile:易变的。当编译器编译时,遇到volatile所修饰的变量时,要从变量的物理地址中取值,而不是从寄存器中取值。
例如:
volatile int i = 0x123;
i = 0x456;
i = 0x789;
当程序运行的时候,会把i的值放在寄存器中,当执行了i = 0x456; i = 0x789;时寄存器的值变了,不是我们期望的i = 0x123;
所以不加volatile修饰时,编译器会从保存变量的寄存器中取值,取到的值可能为0x456或0x789,但是当加入volatile时,是从i 的物理地址中取值位0x123。还有一种可能暂存变量的寄存器被取值以后就会释放,也取不到期望的值。