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。

posted @ 2018-09-03 19:15  c&z  阅读(143)  评论(0编辑  收藏  举报