volatile
2016-06-12 00:06
190 查看
volatile:易变的,不稳定的。volatile用来声明那些可能在你的程序本身不知道的情况下会发生改变的变量。
一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。
对于一般变量:为提高存取速度,编译器优化时有时会先把变量读取到一个寄存器中。以后再取变量值时,就直接从寄存器中取值。
一个参数既可以是const也可以是volatile:一个例子是只读的状态寄存器。它是volatile因为它可能被意想不到地改变。它是const因为程序不应该试图去修改它。(简单点就是该程序代码不能试图去修改它,但不排除硬件方面修改了它,我们每次都得重新读取它的值。)
几个应用例子:
a. 并行设备的硬件寄存器(如:状态寄存器)。
b. 一个中断服务子程序中会访问到的非自动变量。(个人理解:中断服务子程序不能用缓存在寄存器中的值来判断事件,因为那个值可能被修改了,需要重新读取。所以一般需要把这种变量声明为volatile。)
c. 多线程应用中被几个任务共享的变量。
一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。
对于一般变量:为提高存取速度,编译器优化时有时会先把变量读取到一个寄存器中。以后再取变量值时,就直接从寄存器中取值。
一个参数既可以是const也可以是volatile:一个例子是只读的状态寄存器。它是volatile因为它可能被意想不到地改变。它是const因为程序不应该试图去修改它。(简单点就是该程序代码不能试图去修改它,但不排除硬件方面修改了它,我们每次都得重新读取它的值。)
几个应用例子:
a. 并行设备的硬件寄存器(如:状态寄存器)。
b. 一个中断服务子程序中会访问到的非自动变量。(个人理解:中断服务子程序不能用缓存在寄存器中的值来判断事件,因为那个值可能被修改了,需要重新读取。所以一般需要把这种变量声明为volatile。)
c. 多线程应用中被几个任务共享的变量。
相关文章推荐
- 我是如何防止老公变成渣男的
- linux中驱动异步通知
- 临时记录
- Codeforces Round #356 (Div. 2) Jun/09/2016
- 女人的品位如何修炼
- 聪明男人和愚蠢男人的区别
- 如何开发java语言
- (06-09补)Uva 10755 Garbage 废料堆
- 中国未来十年可能因战争而惨不忍睹
- Office 365之AD FS 3.0实现SSO(三)
- Keil的使用方法 - 常用功能(一)
- BZOJ 4552 排序
- 游程编码与哈弗曼编码结合的压缩解压(c语言)
- 再谈PHP中单双引号的区别详解
- 最新最全PHP生成制作验证码代码详解(推荐)
- 详解PHP中cookie和session的区别及cookie和session用法小结
- php gd等比例缩放压缩图片函数
- PHP生成制作验证码的简单实例
- SQL中位数函数实例
- SQL中遇到多条相同内容只取一条的最简单实现方法