易变量

Sik*_*dar 16 c memory multithreading volatile

存储在程序存储器中的volatile变量在哪里(哪个部分)?

Cli*_*ord 21

volatile类型限定符而不是存储类说明符,因此它根本不确定存储位置; 它会影响变量类型的定义,而不会影响其存储.

它只是强制编译器明确读取一个变量,其类型volatile从变量的存储位置(可以是任何地方),而不是假设在例如注册一些先前读取值仍然有效.


Jus*_*cle 11

在C中volatile只告诉编译器 - "你没有足够的知识来假设这个变量的值没有改变".没有"部分",例如BSS,CSS.

将其视为编译器的标志,以防止某些类型的优化.它在嵌入式编程中非常方便,其中某个地址的存储器可能由于硬件设备输入而"改变".

这是一个很好的解释:http://www.embedded.com/columns/programmingpointers/174300478? ajquestid = 137658


Jar*_*Par 7

变量的波动性不会改变存储变量的位置.它改变的是关于如何访问读取和写入的语义.

我不相信C标准说明了volatile的实现.但通常情况下,volatile保证释放对变量的写操作的语义和对变量的读操作的获取语义.但是对于每个实现都不是这样,您应该了解您的特定编译器所保证的内容