社区
C语言
帖子详情
变量前加volatile 是什么意思啊
llw1318
2010-05-28 07:54:43
网上说是直接从内存里取,这是什么意思,程序中变量的保存难道还有不是在内存中放的吗,还可以放在寄存器?哪位高手给帮忙详细说明下啊,谢谢
...全文
340
14
打赏
收藏
变量前加volatile 是什么意思啊
网上说是直接从内存里取,这是什么意思,程序中变量的保存难道还有不是在内存中放的吗,还可以放在寄存器?哪位高手给帮忙详细说明下啊,谢谢
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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经典面试》编译链接、指针、内存bug、函数、其它
课程内容:1.编译链接:编译链接过程、预编译、存储类、生命周期、作用域、链接域等2.指针:指针概念、数组相关的指针、字符串指针、函数指针等3.内存bug:内存越位、内存覆盖、使用非法内存、内存泄露等。4.函数:自定义函数、内联函数、回调函数、变参函数、递归函数、库函数等5.其它:自动类型转换、数据溢出、结构体对齐、
volatile
、typedef、assert宏、逗号表达式、++/--等
STM32 全局
变量
不加
volatile
而被优化的问题
一般情况下,在中断中使用的全局
变量
必须要
volatile
修饰,或者一些 IO 口
变量
必须要
volatile
修饰,但此次发现,即使非中断的情况下,全局
变量
最好也要用
volatile
修饰,不然就会出现预想不到的错误,这类错误还...
Java DCL 单例模式真的需要对
变量
加
Volatile
吗?
目录代码展示DCL分析DCL单例
变量
加
volatile
关键字的原因Java对象创建过程
volatile
修饰单例
变量
的原因不同角度下的对象创建原理从C++角度分析对象创建从Java角度分析对象创建小结CPU模型与DCL完整的Java DCL实例 ...
C语言中
变量
的定义及关键字
volatile
c语言中
变量
定义、
变量
访问及关键字
volatile
volatile
为什么要修饰中断里的
变量
就下面这三种情况,还有利用for循环去延时的程序防止被优化(编译器认为for循环没用而优化掉),没有其它了,如果是这几种,那就干脆直接用
volatile
修饰: 一个是防止
变量
在其它地方被改变,而cash里没有改变,所以...
C语言
69,371
社区成员
243,082
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章