volatile 解释
volatile 的意思是 不稳定的 易变的
在C语言中通常我们用它来修饰变量,用法如下:
volatile int a; //定义了一个int型的变量a,并用volatile修饰
volatile 的作用
用volatile修饰的变量,表示该变量易变的,则告诉编译器,不要对其进行优化。所以它的作用就是防止编译器对代码进行优化。
例子:
int a,b;
int square(int *ptr)
{
return ((*ptr) * (*ptr));
}
int main(void)
{
a = 5;
b = square(&a);
return 0;
}
在上面的程序中,编译器很可能会把程序优化成以下
int square(int *ptr)
{
int tmp = *ptr; //*ptr=a=5;
return tmp*tmp;
}
这样就不用每次都重新读取 a 的值,直接读取一次就可以了,这样做可以提升程序运行的效率。一般情况下,程序这样做都是可行的。但是在以下情况中,却会发生意想不到的错误:
1.中断:若在中断程序中改变变量 a 的值,则很可能变量b c 的值就不会达到预想中的效果。
2.多线程:在另一个线程中改变变量a的值,也很可能会发生类似的错误
3.若变量a 为寄存器的值,则硬件很可能会随时的修改它
以上几种情况如果出现,则编译器优化变量的时候,结果就会发生错误,解决方法就是在变量前加上volatile关键字,告诉编译器,不要来优化该变量。