关键字 volatile

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是什么? volatile关键字是一种类型修饰符,对于用它声明的类型变量,编译器对访问该变量...
    安然_fc00阅读 507评论 0 0
  • 注:这是第三遍读《C语言深度解剖》,想想好像自从大学开始就没读完过几本书,其中谭浩强的那本《C语言程序设计(第四版...
    HavenXie阅读 1,774评论 1 6
  • 今晚0点就元旦了,一年过得好快啊,一转眼走到年底了,考试,是我最大的烦恼啦。每当达到考试,我就很担心,因为,我...
    longerandfaster阅读 342评论 2 4
  • (根据梦改编) 一天下雨,小王的父母打电话给生活拮据的邻居老张,让他把晾在外面的衣服帮忙收进家中,并告诉他钥匙就...
    不会说话的CAT阅读 281评论 1 1
  • 获取倒计时之前,我们不妨先来看怎样获取当前时间吧!!! 获取倒计时 1、实现倒计时功能2、倒计时结束按钮可被点击,...
    小纸人儿阅读 1,113评论 0 0