volatile 详解

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关键字,告诉编译器,不要来优化该变量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值