volatile
volatile是类型修饰符,加上这个关键字,我们可以知道该变量可能被某些未知的因素更改(比如,操作系统,硬件或者其他线程等),但是我们不想它被修改,这个关键字可以防止编译器的优化,如下:
int main() { volatile int i = 10; int a = i; //... int b = i; return 0; }
volatile表明i是随时可能发生变化的,每次使用都必须从i的地址中进行取值,如果没有加volatile关键字,那么编译器发现两次从i中取值,并且在a和b变量之间没有对i进行过操作,编译器在给b进行初始化的时候,就会直接从寄存器中取值给b。