编译器无法消除或重新排列对 volatile
修饰变量的读/写操作。
但是,如果存在其他变量,这些变量可能是 volatile
修饰的,也可能不是,那么情况如何呢?
情景1
volatile int a;
volatile int b;
a = 1;
b = 2;
a = 3;
b = 4;
编译器是否可以重新排列第一和第二,或第三和第四个赋值操作?
情景2
volatile int a;
int b, c;
b = 1;
a = 1;
c = b;
a = 3;
同样的问题,编译器是否可以重新排列第一和第二个,或者第三和第四个赋值语句?
volatile
+1。 - Norman Ramseyvolatile
的定义是“不优化读取和写入”(在没有可见副作用的假设下)。最好不要依赖于与volatile有关的任何顺序,这与代码消除无关。 - v.oddou