变量前加volatile 是什么意思啊

llw1318 2010-05-28 07:54:43
网上说是直接从内存里取,这是什么意思,程序中变量的保存难道还有不是在内存中放的吗,还可以放在寄存器?哪位高手给帮忙详细说明下啊,谢谢
...全文
340 14 打赏 收藏 转发到动态 举报
写回复
用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时,编译器在它每次被程序访问时从存储器中重新装入其值,这极大地降低了可能的优化。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧