volatile的含义

来源:互联网 发布:隐形眼镜必知常识护理 编辑:程序博客网 时间:2024/04/29 15:36

       volatile总是与优化有关,编译器有一种技术叫做数据流分析,分析程序中的变量在哪里赋值、在哪里使用、在哪里失效,分析结果可以用于常量合并,常量传播等优化,进一步可以死代码消除。但有时这些优化不是程序所需要的,这时可以用volatile关键字禁止做这些优化,volatile的字面含义是易变的,它有下面的作用:

1 不会在两个操作之间把volatile变量缓存在寄存器中。在多任务、中断、甚至setjmp环境下,变量可能被其他的程序改变,编译器 自己无法知道,volatile就是告诉编译器这种情况。

2 不做常量合并、常量传播等优化,所以像下面的代码:
volatile int i = 1;
if (i > 0) ...

if的条件不会当作无条件真。

3 对volatile变量的读写不会被优化掉。如果你对一个变量赋值但后面没用到,编译器常常可以省略那个赋值操作,然而对Memory Mapped IO的处理是不能这样优化的。

即:volatile修饰符的主要目的是提示编译器,该对象的值可能在编译器为监测到的情况下被改变,因此编译器不能武断地对引用这些对象的代码做优化处理。

      任何时候用到改变量的时候,必须从内存中重新读取数据,不可以读取上次驻留在寄存器中的值~~~

原创粉丝点击