Jus*_*cle 11
在C中volatile只告诉编译器 - "你没有足够的知识来假设这个变量的值没有改变".没有"部分",例如BSS,CSS.
将其视为编译器的标志,以防止某些类型的优化.它在嵌入式编程中非常方便,其中某个地址的存储器可能由于硬件设备输入而"改变".
这是一个很好的解释:http://www.embedded.com/columns/programmingpointers/174300478? ajquestid = 137658
变量的波动性不会改变存储变量的位置.它改变的是关于如何访问读取和写入的语义.
我不相信C标准说明了volatile的实现.但通常情况下,volatile保证释放对变量的写操作的语义和对变量的读操作的获取语义.但是对于每个实现都不是这样,您应该了解您的特定编译器所保证的内容