关键字volatile的作用

来源:互联网 发布:二战战斗机性能数据 编辑:程序博客网 时间:2024/06/05 13:19

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可以防止编译器为了提高速度将一个变量缓存到寄存器而不写回。

0 0
原创粉丝点击