volatile 的应用 沉沉_

        C++中有多种存储器说明符,如auto、register、static、extern、mutable以及volatile等。如果从事嵌入式行业硬件等工作,则需要对volatile这个存储器说明符有深刻的理解,需要知道什么时候改用它声明变量。

  volatile,意如其名:易变的,易挥发的。它表明:即使程序代码未对内存单元进行修改,其值也可能发生变化。对于学习软件的人来说,这是否不可理解,对于稍微有点硬件知识的人,则很好理解。例如:串口接收数据,则有可能是硬件接收数据而不是软件改变数据。或者两个程序共享数据,另一方程序可能单方面修改内存数据。所以需要重新读取内存的数据才能保证不出错误。而如果不将这种类型的内存变量申明为volatile,则编译器有可能该内存变量进行优化。

  所谓编译器对寄存器变量进行优化指的是:如果程序的几条语句使用一个变量多次,编译器就会将该值缓存到寄存器,因为访问寄存器的速度要比访问内存的速度快很多,而这种优化则假设该变量在这多次的使中其值不发生变化。

  所以,如果一个变量在不经软件修改的情况下其值可能发生变化,则需要将其显式的申明为volatile,以防止寄存器对其进行优化。

原文地址:https://www.cnblogs.com/chenchenluo/p/2163865.html