在c++Primer中,对volatile做了详细的解释。
当一个对象的值可能会在编译器的控制或监测之外被改变时 ? 那么该对象应该声明成 volatile ?,也就是说程序有可能被编译器优化掉了,一些程序没有执行,或者改变了程序本来的意思。
volatile有个经典的例子:
----------------------------------------------------------------------------------------
for (int i=0; i<100000; i++);
这个语句用来测试空循环的速度的
但是编译器肯定要把它优化掉,根本就不执行
如果你写成
for (volatile int i=0; i<100000; i++);
它就会执行了
使用地方
----------------------------------------------------------------------------------------
1、中断服务程序中修改的供其它程序检测的变量需要加volatile;
2、多任务环境下各任务间共享的标志应该加volatile;
3、存储器映射的硬件寄存器通常也要加volatile说明,因为每次对它的读写都可能有不同意义;
|