永发信息网

C语言中关键字volatile是什么意思

答案:3  悬赏:10  手机版
解决时间 2021-02-09 06:26
C语言中关键字volatile是什么意思
最佳答案
volatile的本意是一般有两种说法。1.“暂态的 2.“易变的。这两种说法都有可行。一个定义为volatile的变量是说这变量可能会被意想不到的改变,这样,编译器就不会去假设这个变量的值了。优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。 www.okeycar.com
全部回答
简单的理解就是这个变量可能会被外部函数改变,为了让这个改变能有效执行,不被编译器优化掉。 举个例子吧,一个函数用了一个外部的变量,但这个变量在此函数中没有改变,只是引用,这时候编译器会去做优化,把它的值暂放在内部寄存器中,用的时候读取的是寄存器的值,而不是去访问它的地址取值,这样的话,当这个变量在外部发生了变化的时候,比如中断,或者另外的进程等等。但在这个函数里面就不能起作用,因为被优化后使用的是寄存器的值,还是原来的值,导致错误发生。这种情况下,就要加上这个定义,就不会被优化了。
用volatile关键字定义变量,相当于告诉编译器,这个变量的值会随时发生变化,每次使用时都需要去内存里重新读取它的值,并不要随意针对它作优化。 不使用volatile定义的变量,可能因为编译器优化而出现一些问题,具体可以看给出的参考资料,里面有一个例子。 建议使用volatile变量的场所: (1) 并行设备的硬件寄存器 (2) 一个中断服务子程序中会访问到的非自动变量(全局变量) (3) 多线程应用中被几个任务共享的变量
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
为什么说形成概念和掌握规律是中学物理教学的
乌鲁木齐希尔顿酒店到乌鲁木齐南站坐出租车费
缪四春中医伤骨科牙科诊所这个地址在什么地方
你好,请问18岁可以用玻尿酸补水面膜吗?
与传统工业相比,高新技术产业有自己的特点你
约珥家披萨地址有知道的么?有点事想过去
io是啥?
一共有多少个整数x适合不等式:x加2000的绝对
高梁是否可以喷玉米助壮素
主持人的语言为什么要强调规范性
去韩国旅游10天左右两个人大概要多少钱
龙源百货这个地址在什么地方,我要处理点事
怎么玩好金克斯
天午地产地址有知道的么?有点事想过去
请问唐时的凉州现在哪里?
推荐资讯
我说了好多伤老公的话,让老公很烦,我能怎么
到底是氢氧化钠溶液能与二氧化碳反应还是氢氧
鞍山会开沃尔玛吗?
【挲怎么读】""挲""怎么读?
海亮学校有几个校区?
1977年农历12月24日属蛇的男生和1992年9月15
文城乡敬老院在什么地方啊,我要过去处理事情
钢铁厂用白灰面子干什么
申通快递(龙桥新村门市房2幢111)地址在什么地
使用数据库的存储过程进行复杂的业务处理可行
源鑫茶楼怎么去啊,我要去那办事
仁怀驾校地址在什么地方,想过去办事
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?