关于volatile的简单阐述
2008-09-02 10:13
176 查看
volatile修饰符的作用是告诉编译器说,“这个变量的值可能以你意想不到的方式改变哦!你要小心了!”
比如某程序,有一个全局变量,它的地址被传递到某个中断驱动的函数里,而这个函数会更新该全局变量的值。
在上述例子里,变量的值并不是由程序中显示的赋值语句改变的,也就是说,是某种“意想不到的方式”,某个“神秘力量”……
这种外部力量(中断是一个常见的例子)引起的变量值的改变是很值得注意和小心的。因为C++编译器会从它的角度出发,来对某些变量作出“值没有发生变化”的假设,并在这个假设的基础上对某些表达式做出优化,比如,让引用变量的时候不必每次都做真正的取值操作,来换回一些性能上的提升。
但是,如果凌驾于程序之上的一些因素改变了变量的值,就像上面的例子,编译器的假设被打破了,问题也就有可能出现了。
为了避免出现这种问题,我们必须声明这种变量为“volatile”,像这样:
volatile int var;
这样一来,编译器知道了,哦,这个变量的值随时可能以我意想不到的方式改变,我要小心,比如,以后每次引用这个量的时候,都老老实实地去取它最新的值,不偷懒。
比如某程序,有一个全局变量,它的地址被传递到某个中断驱动的函数里,而这个函数会更新该全局变量的值。
在上述例子里,变量的值并不是由程序中显示的赋值语句改变的,也就是说,是某种“意想不到的方式”,某个“神秘力量”……
这种外部力量(中断是一个常见的例子)引起的变量值的改变是很值得注意和小心的。因为C++编译器会从它的角度出发,来对某些变量作出“值没有发生变化”的假设,并在这个假设的基础上对某些表达式做出优化,比如,让引用变量的时候不必每次都做真正的取值操作,来换回一些性能上的提升。
但是,如果凌驾于程序之上的一些因素改变了变量的值,就像上面的例子,编译器的假设被打破了,问题也就有可能出现了。
为了避免出现这种问题,我们必须声明这种变量为“volatile”,像这样:
volatile int var;
这样一来,编译器知道了,哦,这个变量的值随时可能以我意想不到的方式改变,我要小心,比如,以后每次引用这个量的时候,都老老实实地去取它最新的值,不偷懒。
相关文章推荐
- 关于程序解耦性的简单阐述
- 关于多态的简单阐述
- 关于冒泡排序的最简单方法和进一步的优化
- 关于GridView中自定义分页、单选、多选、排序、自增列的简单应用
- 关于事件的简单优化
- 关于JAVA中一些简单加密算法的思考
- 关于VS2005中GridView的自定义分页,单选、多选、排序、自增列的简单应用
- 关于nose的简单用法(二)
- 关于简单控件的运用
- C Interfaces and Implementations 关于setjmp,longjmp和volatile
- MyBatis关于识别器和缓存的简单理解
- 关于iOS中简单实现调用系统相机及相册功能
- 大神都未必解决的了简单问题,关于文字左右两端对齐。
- SQL关于相关子查询与EXISTS的简单总结
- 关于VS2005中GridView的自定义分页,单选、多选、排序、自增列的简单应用。
- 关于APP开机自启动的简单实现
- 关于NDoc的简单说明和一个疑惑
- 关于java的volatile关键字吐血总结
- 关于xib的一些简单用法
- 百度手机卫士,简单粗暴至极(关于Stagefright高危漏洞)