博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
volatile关键字
阅读量:4297 次
发布时间:2019-05-27

本文共 796 字,大约阅读时间需要 2 分钟。

volatile作为一个关键字,用来修饰变量,在程序设计中,使用该关键字声明的变量或对象通常拥有和优化或多线程相关的特殊属性。

volatile作为指令关键字最主要的作用就是,确保被修饰的指令不会因为编译器的优化而省略,并且要求每次直接读值。简洁的来说,就是为了防止编译器对代码进行优化而设计的关键字。

是因为有些程序中的变量在编译的时候或许会因为一些外界的原因发生意想不到的改变,这样编译器就不会去假设这个变量的值了,也就是说,优化器在用到这个变量的时候必须每次都小心的重读取这个变量的值,而不是使用保存在寄存器里面的备份

先介绍一下几个用到volatile变量的例子

(1) 并行设备的硬件寄存器,如状态寄存器

(2)中断服务子程序中会访问到的非自动变量

(3)多线程应用中被几个任务共享的变量

嵌入式系统程序员会经常同硬件,中断,等打交道,所有的这些都要求使用volatile变量,因为如果你不懂得volatile变量,将会给你的工作带来毁灭性的打击哦。

再介绍几个经常会问到的问题,聪明的你,看看是否已经对volatile这个关键字充分的了解了

1  一个参数即可以是const还可以是volatile吗?  说说这是为什么。

是的,例如只读的状态寄存器。他是volatile,因为它可能被意想不到的改变。它是const是因为程序不应该去修改一个被const修饰的变量。

2  一个指针可以是volatile吗? 为什么。

是这样的,尽管你见到的很少,但是还是有的,比如当一个中断服务子程序修改一个指向一个buffer的指针时。

那么通常在哪些地方会用到volatile呢?

首先,多任务环境下各任务间共享的标志应加上volatile。

还有中断服务程序中修改的供其它程序检测的变量需要加上。

存储器映射的硬件寄存器常常也要加上volatile来修饰,因为每次对它的读写都可能有不同的意义哦

转载地址:http://hbjws.baihongyu.com/

你可能感兴趣的文章
Yml文件的读取与写入
查看>>
OpenCV 完全安装 新增VS2010+OpenCV2.1,新增VS2010+OpenCV2.3.1
查看>>
使用GDI+可以方便的把OpenCV的图像矩阵类型数据显示在MFC的窗口中
查看>>
Opencv书籍
查看>>
OPENCV错误
查看>>
OpenCV最常用
查看>>
文章索引~OpenCV
查看>>
国内从事红外热成像的公司
查看>>
opencv Bmp和opencv格式转换
查看>>
IplImage结构
查看>>
CvMat
查看>>
图像处理和图像识别中常用的OpenCV函数
查看>>
VC多线程--在线程之间传递窗口句柄是安全的
查看>>
在OnPaint中必须调用一次BeginPaint和EndPaint,且也只能调用一次
查看>>
为什么析构函数是虚函数
查看>>
多线程和MsgWaitForMultipleObjects
查看>>
窗口刷新 Invalidate UpdateWindow RedrawWindow
查看>>
Visual Studio 2008 查找耗时函数 C++ Profiler 性能 优化
查看>>
MFC 工具条 CToolBar : 添加控件
查看>>
MFC程序崩溃的友好处理
查看>>