yydg.net
当前位置:首页 >> volAtilE变量寄存器 >>

volAtilE变量寄存器

精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份.下面是volatile变量的几个例子:1). 并行设备的硬件寄存器(如:状态寄存器)2). 一个中断服务子程序中会访问到的非自

一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了.精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份.下面是volatile变量的几个例子: 1). 并行设备的硬件寄存器(如:状态寄存器) 2). 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables) (中断嵌套)3). 多线程应用中被几个任务共享的变量

volatile是个类型限定符.声明为volatile的变量表明它具有与优化相关的特殊属性.volatile用于强制某个实现屏蔽可能的优化.例如,对于具有内存映象输入/输出的机器,指向设备寄存器的指针可以声明为指向volatile的指针,目的是防止编译器通过指针删除明显多余的引用.

就是为了避免非预期的被更改

用volatile关键字定义变量,相当于告诉编译器,这个变量的值会随时发生变化,每次使用时都需要去内存里重新读取它的值,并不要随意针对它作优化.不使用volatile定义的变量,可能因为编译器优化而出现一些问题,具体可以看给出的参考资料,里面有一个例子.建议使用volatile变量的场所:(1) 并行设备的硬件寄存器(2) 一个中断服务子程序中会访问到的非自动变量(全局变量)(3) 多线程应用中被几个任务共享的变量

使用Volatile,就是告诉编译器这个变量的值是随时变化的, 且不是由当前线程的执行指令改变的, 比如硬件端口内容, 其值是变化的, 并且与当前线程的执行指令无关, 为了获取正确的值, 一定要从其内容地址当中是读取, 否则不能读到正

volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据.如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这

volatile的本意是“易变的”,volatile定义的变量它的值在编译时是会改变的,跟const相反,而const定义的变量一直不会变的,如果变量加上volatile修饰,则编译器保证对此变量的读写操作都不会被优化(肯定执行).

const定义的值不能被修改volatile可以 volatile的意思是它定义的变量很可能被修改 程序每次读这个变量时不是从寄存器读而是从内存读 防止该值发生了改变

就是一些并行设备的寄存器如状态寄存器,控制寄存器之类的

网站首页 | 网站地图
All rights reserved Powered by www.yydg.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com