volatile 类型限定符告诉编译器被它修饰的变量可能会被应用程序之外的其他东西修改,比如操作系统、硬件或者一个并发执行的线程。
确切地说,volatile 限定符告诉编译器不要对这个变量(被 volatile 修饰的变量)进行任何形式的优化,而是始终从变量在内存中的位置读取变量的值。
如果不给变量加上 volatile 限定符,编译器可能会对 C++ 代码进行优化。在这个优化中,编译器把变量的值载入到 CPU 寄存器中,这个操作只需要进行一次。然后它只对 CPU 寄存器中的值进行引用,与每次都从变量所在的内存地址取得变量的值并进行使用相比,优化操作能够得到更好的性能。
给一个结构加 volatile 限定符等于给结构中所有的成员都加 volatile 限定符,这样可以确保任何一个成员始终都是从内存中读取的。
如果传一个变量的地址给函数,那么函数必须从内存中读取它的值,编译器的优化程序不会对此产生影响。
备注:
volatile: 易变的(英文注释)。