tags:
- Cpp
Volatile Specifier in C++ (Questioning)
volatile
的作用到底是什么?我知道 volatile
声明的变量不会被编译器优化到寄存器中去。意思说用 volatile
声明的变量只能从内存中取,然后放到内存中。然后使用 volatile
会 back-off 编译器的优化。C++ 经常把 const
和 volatile
合并称为 CV qualifier。
硬件开发的程序中,经常会出现 volatile
这个修饰符,网上给出的解释是告诉编译器该变量可能会在程序外被改变,因此不应该对变量进行优化?理解不了。由于 volatile
会 back-off 编译器的优化,所以很容易想明白的应用场景就是一些需要测试代码性能的场景,我们想避免编译器对代码的优化(更何况不同的编译器生产的指令还可能不一样),以确保编译器能够生成代码运行时的真实行为和生成的机器指令。
还有对 volatile
的误解,认为其和并发程序有关,提供线程安全。实际上,这只是无稽之谈,有些人将不把 volatile
的变量暂存进 cache 误解成不会发生数据竞争,但 volatile
并不对其做任何保证。(而且 volaile
也不会对程序乱序执行有任何的 restrictions)