volatile的含义
来源:互联网 发布:数据产品经理 编辑:程序博客网 时间:2024/06/09 16:22
volatile总是与优化有关,编译器有一种技术叫做数据流分析,分析程序中的变量在哪里赋值、在哪里使用、在哪里失效,分析结果可以用于常量合并,常量传播等优化,进一步可以死代码消除。但有时这些优化不是程序所需要的,这时可以用volatile关键字禁止做这些优化,volatile的字面含义是易变的,它有下面的作用:
1 不会在两个操作之间把volatile变量缓存在寄存器中。在多任务、中断、甚至setjmp环境下,变量可能被其他的程序改变,编译器 自己无法知道,volatile就是告诉编译器这种情况。
2 不做常量合并、常量传播等优化,所以像下面的代码:
volatile int i = 1;
if (i > 0) ...
if的条件不会当作无条件真。
3 对volatile变量的读写不会被优化掉。如果你对一个变量赋值但后面没用到,编译器常常可以省略那个赋值操作,然而对Memory Mapped IO的处理是不能这样优化的。
前面有人说volatile可以保证对内存操作的原子性,这种说法不大准确,其一,x86需要LOCK前缀才能在SMP下保证原子性,其二,RISC根本不能对内存直接运算,要保证原子性得用别的方法,如atomic_inc。
对于jiffies,它已经声明为volatile变量,我认为直接用jiffies++就可以了,没必要用那种复杂的形式,因为那样也不能保证原子性。
你可能不知道在Pentium及后续CPU中,下面两组指令
inc jiffies
;;
mov jiffies, %eax
inc %eax
mov %eax, jiffies
作用相同,但一条指令反而不如三条指令快。
- volatile的含义
- volatile的含义
- volatile 的含义
- volatile 的含义
- volatile的含义
- volatile的使用含义
- 关键字volatile的含义
- volatile关键字的含义
- volatile 与 explicit 的含义
- static和volatile的含义
- volatile含义
- volatile关键字的含义(转载)
- 关键字volatile的含义及常见用法
- C语言中关键字volatile的含义
- java中volatile关键字的含义
- java中volatile关键字的含义
- java中volatile关键字的含义
- java中volatile关键字的含义
- 城市自来水公司生产过程自动化监控系统(原创)
- MSTP老树发新枝
- MSTP技术新发展和3G传输
- 新一代MSTP技术及其应用
- SQLServer和Oracle常用函数对比
- volatile的含义
- test.
- 如何成为一名JAVA初级程序员
- 二叉树的java实现
- 地球人都知道呀
- 原创技术高手-基于J2EE的Blog平台
- 3DNS多链路接入解决方案
- Cisco PIX 防火墻設置
- 基于移动代理的分布式入侵检测系统