标签:c语言
从词面上来讲,volatile的意思是易变的,也就是说,在程序运行的过程中,有一些变量可能会被莫名其妙的改变,而优化器为了节约时间,有时候不会重读这个变量的真实值,而是去读在寄存器的备份,这样的话,这个变量的真实值反而被优化器给“优化”掉了,用时髦的词说就是被“被和谐”了。如果使用了这个修饰词,就是通知编译器别犯懒,老老实实的去重读一遍!
另外,由于访问寄存器的速度要快过RAM,所以编译器一般都会作减少存取外部RAM的优化,但有可能会读脏数据。当要求使用volatile声明变量的值的时候,系统总是重新从他所在的内存读取数据,即使它前面的指令刚刚从该处读取过数据。而且读取的数据立刻被保护。精确的说是,优化器在用到这个变量的时必须每次都小心地重新读取这个变量的值,而不是保存在寄存器里的备份。
volatile变量的例子
(1)并行设备的硬件寄存器(如:状态寄存器)
(2)一个中断服务子程序中会访问到的非自动变量(Non-automatic variables)
(3)都线程应用中被几个任务共享的变量
标签:c语言
原文地址:http://blog.csdn.net/u011046042/article/details/39998539