关键字volatile的作用

volatile关键字经常是我们能够在程序中看见的关键字,在c primer plus一书中,作者写道“典型地,volatile被应用于硬件地址和其他并行运行的程序共享的数据,例如,一个地址中可能保存着当前的时钟时间。不管程序做些什么,该地址的值都会随着时间而改变。”

C primer plus书中举的例子非常生动。

int a=x;   

//一些和x无关的代码

int b=x;

         可能有的编译器在编译上述这样一段代码的时候,会先后两次将x在内存中的数值赋给a和b。但是可能有些编译器比较“聪明”,会将x的数值放进某个寄存器中,然后当需要运行int b=x的指令时,直接从寄存器而非内存中取值,这样可以节省时间,毕竟访问寄存器的时间要低于的时间。

         然而,这种“聪明”的做法可能会带来副作用,使得“聪明反被聪明误”。而这恰恰取决于数据x的属性,或者说意义,如果x恰好是上文提到的“应用于硬件地址和其他并行运行的程序共享的数据”的话,例如时间的话,那么上面的代码中的a=b=x(某个寄存器的数值),而事实上,程序员的本意是a=time1,b=time1+δ(执行int a=x和int b=x之间代码花费的时间)。

         因而可以知道,volatile关键的字的作用是告诉编译器,不能假定某个变量没有发生变化从而去进行优化(即将该数值缓存在寄存器中),而是在每次用到该数值的时候都去内存读书数值。简而言之,volatile可以防止编译器为了提高速度将一个变量缓存到寄存器而不写回。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值