您的位置:首页 > 其它

关于volatile的简单阐述

2008-09-02 10:13 176 查看
volatile修饰符的作用是告诉编译器说,“这个变量的值可能以你意想不到的方式改变哦!你要小心了!”
比如某程序,有一个全局变量,它的地址被传递到某个中断驱动的函数里,而这个函数会更新该全局变量的值。
在上述例子里,变量的值并不是由程序中显示的赋值语句改变的,也就是说,是某种“意想不到的方式”,某个“神秘力量”……
这种外部力量(中断是一个常见的例子)引起的变量值的改变是很值得注意和小心的。因为C++编译器会从它的角度出发,来对某些变量作出“值没有发生变化”的假设,并在这个假设的基础上对某些表达式做出优化,比如,让引用变量的时候不必每次都做真正的取值操作,来换回一些性能上的提升。
但是,如果凌驾于程序之上的一些因素改变了变量的值,就像上面的例子,编译器的假设被打破了,问题也就有可能出现了。
为了避免出现这种问题,我们必须声明这种变量为“volatile”,像这样:
volatile int var;
这样一来,编译器知道了,哦,这个变量的值随时可能以我意想不到的方式改变,我要小心,比如,以后每次引用这个量的时候,都老老实实地去取它最新的值,不偷懒。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  编译器 优化 c