在嵌入式系统中,挥发性用于让编译器不修改/优化变量,但是对于局部变量使用挥发性的意义是什么,当用于全局变量时它驻留在数据段中,如果用于局部变量的目的是什么它会在堆栈中吗?
首先,范围和存储期限是不同的事情。仅仅因为某些内容是在本地范围内声明的,它不一定具有自动存储持续时间,这是此处使用的正确术语。这意味着局部作用域变量的分配位置由编译器自动处理。
volatile变量的存储位置与变量之间没有直接关系。exceptvolatile访问意味着需要进行内存访问。大多数情况下,编译器不会将自动存储volatile变量存储在寄存器中,而是存储在堆栈上,因为它们通过这种方式获取地址。但 C 标准并不要求这些。
同样,volatile变量需要分配在未预取到数据缓存的内存区域中,因为缓存将与访问时的值更新发生冲突。谁负责确保这一点并不总是明确的,责任落在编译器和程序员之间。
至于使用自动存储volatile变量的目的有很多。与硬件寄存器通信,强制执行针对关键代码优化的块,确保变量在堆栈上分配,以便它可以在调试器等中查看。