社区
C语言
帖子详情
变量前加volatile 是什么意思啊
llw1318
2010-05-28 07:54:43
网上说是直接从内存里取,这是什么意思,程序中变量的保存难道还有不是在内存中放的吗,还可以放在寄存器?哪位高手给帮忙详细说明下啊,谢谢
...全文
363
14
打赏
收藏
变量前加volatile 是什么意思啊
网上说是直接从内存里取,这是什么意思,程序中变量的保存难道还有不是在内存中放的吗,还可以放在寄存器?哪位高手给帮忙详细说明下啊,谢谢
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
某某9
2010-05-29
打赏
举报
回复
[Quote=引用 13 楼 mostmark 的回复:]
volatile易变的,加上后编译器不会对其进行优化
主要用在三个方面
1 多线程共享的全局变量
2 中断程序
3 状态寄存器
比如一个状态寄存器你连续读取两次, int netconf_1, netconf_2;
netconf_1 = *(int * )0x56000004;
……
[/Quote]
volatile是声明该变量是易变的
mostmark
2010-05-29
打赏
举报
回复
volatile易变的,加上后编译器不会对其进行优化
主要用在三个方面
1 多线程共享的全局变量
2 中断程序
3 状态寄存器
比如一个状态寄存器你连续读取两次, int netconf_1, netconf_2;
netconf_1 = *(int * )0x56000004;
netconf_2 = *(int * )0x56000004;
很可能就会被优化成 netconf_2 = netconf_1 = *(int *)0x56000004;
但是这可能不是你想要的,因为在读取的过程中状态寄存器内容会被硬件自动改写的,可能是不容的值
cxxer
2010-05-29
打赏
举报
回复
易失性变量。
ccdxjjxy
2010-05-29
打赏
举报
回复
防止被编译器优化,它的值只能被硬件去修改
mzlogin
2010-05-28
打赏
举报
回复
我见过它几回都是在多线程编程中,
对它的理解也如楼上的几位讲的,
是说对它不作优化,不存储在寄存器中,
每次都是直接读取它本身。
东莞某某某
2010-05-28
打赏
举报
回复
确实 硬件里有用到 一般用不到
volatile网上介绍的很详细啦
happytang
2010-05-28
打赏
举报
回复
这个东西我从来没用过
呵呵
请看看c专家编程里面的说明
jldream110
2010-05-28
打赏
举报
回复
volatile是声明该变量是易变的, 编译器把常用的值放在寄存器里了 所以用的时候 直接在寄存器里取上一次用的值了 ,可是因为这个变量是易变的 所以可能这种在寄存器取值的优化处理会带来错误 。 因此加上volatile告诉编译器这个变量是易变的 必须每次使用都即时的去该变量的内存中读取 这样就会保证实时性和正确性。这个在嵌入式里 用的比较多
ArtiFly2000
2010-05-28
打赏
举报
回复
表示这个变量的值可能被其它程序改变,
这种变量的值,编译器不会使用寄存器缓存,而是每次都到内存去读,以能读到被其它程序改变之后的最新值
jldream110
2010-05-28
打赏
举报
回复
volatile是声明该变量是易变的, 编译器把常用的值放在寄存器里了 所以用的时候 直接在寄存器里取上一次用的值了 ,可是因为这个变量是易变的 所以可能这有寄存器的优化处理会带来错误 因此加上volatile告诉编译器这个变量是易变的 必须每次使用都即时的去改变量的内存中读取 这样就会保证实时性和正确性。这个在嵌入式里 用的比较多
pengzhixi
2010-05-28
打赏
举报
回复
防止编译器优化将变量的值直接从在寄存器里面取值,加上这个关键词,以后每次读取该变量的值都需要从它的内存中去读取
qq120848369
2010-05-28
打赏
举报
回复
[Quote=引用 2 楼 joanlynnlove 的回复:]
学习。。。
[/Quote]
同学习.今天论坛是否在维护.那个游戏我玩了1分钟
acdbxzyw
2010-05-28
打赏
举报
回复
学习。。。
sduxiaoxiang
2010-05-28
打赏
举报
回复
olatile关键字指定其后的名称相关的值可以通过不是用户应用中的那些动作而进行修改,因此,volatile关键字对在可被多个过程访问的共享存储器中或与中断服务例程通讯用的全局数据区域中说明对象是非常有用的。当一个名称被说明为volatile时,编译器在它每次被程序访问时从存储器中重新装入其值,这极大地降低了可能的优化。
C语言关键字
volatile
的作用
C语言的关键字,
volatile
,表示易变的数据,这个
变量
前面加上
volatile
是一个安全保障措施,加上这个关键字的目的就是防止编译器优化....对
变量
加上
volatile
就是告诉编译器,无论干什么都原封不动的去执行,避免优化掉了.
java中
volatile
变量
是什么?
volatile
变量
和atomic
变量
有什么不同?
java中
volatile
变量
是什么?
volatile
变量
和atomic
变量
有什么不同?
STM32 全局
变量
不加
volatile
而被优化的问题
一般情况下,在中断中使用的全局
变量
必须要
volatile
修饰,或者一些 IO 口
变量
必须要
volatile
修饰,但此次发现,即使非中断的情况下,全局
变量
最好也要用
volatile
修饰,不然就会出现预想不到的错误,这类错误还...
Java DCL 单例模式真的需要对
变量
加
Volatile
吗?
目录代码展示DCL分析DCL单例
变量
加
volatile
关键字的原因Java对象创建过程
volatile
修饰单例
变量
的原因不同角度下的对象创建原理从C++角度分析对象创建从Java角度分析对象创建小结CPU模型与DCL完整的Java DCL实例 ...
volatile
变量
和 atomic
变量
有什么不同?
volatile
变量
:使用
volatile
关键字修饰的
变量
可以确保对该
变量
的读取和写入操作对其他线程是可见的。
volatile
变量
:适用于对
变量
的读取和写入操作都是简单的赋值操作,并且需要保证对其他线程的可见性。
volatile
...
C语言
70,026
社区成员
243,244
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章