美文网首页
关键字 volatile

关键字 volatile

作者: 曹小恒 | 来源:发表于2018-04-02 22:28 被阅读0次

volatile是一个和和const对应的修饰符号. 表示这个变量可能被某种不被编译器控制的因素修改.比如操作系统,硬件和其他的线程.遇到这个关键字,则编译器对于关联这个变量的代码将不做优化,从而提供对特殊地址的稳定访问.声明语法为:int volatile vInt.
编译器遇到变量vInt 的时候,即使刚刚访问过这个变量,编译器仍然对这个变量的初始内存地址进行访问,因为这个变量可能是时时变化的.
比如在程序中插入了一段汇编代码而编译器并不知道,此时对于访问的变量可以加上volatile 修饰符.
一般有三个地方需要使用这个修饰符:

  1. 多任务环境下任务共享的标志
  2. 硬件寄存器的访问
  3. 程序中供其他程序检测的变量.

volatile 指针
const类似,volatile也有指针变量和变量指针两说.

  • 对象,数据是const或者volatile
const char* cpch
volatile char* vpch
  • 指针本身(一个整型变量)是const或者volatile
char* const pchc;
char* volatile pchv;

可以把一个非volatile int赋值给volatile int,但是对象不行

多线程下的 volatile
两个线程共用一个变量的时候,这个变量必须要用volatile修饰,以防止编译器优化,将寄存器中缓存的变量直接装入CPU 寄存器中.
volatile保证了编译器每次都能直接从内存地址中直接访问某个变量,而不是从寄存器中. 保证了一些共享的标志位等数据的实时更新.

相关文章

网友评论

      本文标题:关键字 volatile

      本文链接:https://www.haomeiwen.com/subject/itoxhftx.html