[c]volatile关键字

2021/02 22 20:02

本意:易变的,不稳定的 ,无定性的,可能急剧波动的

作用:限制编译器对变量的存取进行优化

表明某个变量的值可能在外部被改变,因此对这些变量的存取不能缓存到寄存器,每次使用时需要重新存取。该关键字在多线程环境下经常使用,因为在编写多线程的程序时,同一个变量可能被多个线程修改,而程序通过该变量同步各个线程

不会在两个操作之间把volatile变量缓存在寄存器中。在多任务、中断、甚至setjmp环境下,变量可能被其他的程序改变,编译器自己无法知道,volatile就是告诉编译器这种情况。

不做常量合并、常量传播等优化,所以像下面的代码
volatile int i = 1;
if (i>0) … // if的条件不会当作真

对volatile变量的读写不会被优化掉