社区
C语言
帖子详情
变量前加volatile 是什么意思啊
llw1318
2010-05-28 07:54:43
网上说是直接从内存里取,这是什么意思,程序中变量的保存难道还有不是在内存中放的吗,还可以放在寄存器?哪位高手给帮忙详细说明下啊,谢谢
...全文
388
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时,编译器在它每次被程序访问时从存储器中重新装入其值,这极大地降低了可能的优化。
volatile
unsigned int
什么意思
volatile
unsigned int
什么意思
加
volatile
是
什么意思
,什么情况下加 这个多是嵌入式编程时可能会用到。
volatile
的意思是告诉编译器,在编程源代码时,对这个
变量
不要使用优化。 在一般的程序设计中,如: int *a; int b; b = (*a) * (*a);这种情况。 通常编译器为了减少存储器的读写时间,会把代码优化为: int *a; int b...
volatile
变量
声明一个
volatile
变量
,并赋值 public class
Volatile
Test { static
volatile
int i; public static void main(String[] args){ i = 10; } } 看看加了
volatile
之后,编译出来的字节码有什么不同,执行 javap -verbose
Volatile
T...
咦,咋没加
volatile
,
变量
也可见的呢?
本想今天复习一下
volatile
的,结果在写demo时,怎么也达不到效果。还以为写错的呢。最后发现是 System.out.printlnr惹的祸。 我的demo如下: 定义一个
变量
控制线程的中断。 最初的demo是这样的: class Test1{ //public
volatile
static int num =0; public static int num =0; public static void main(String[] args) { new Th
java中
volatile
变量
是什么?
volatile
变量
和atomic
变量
有什么不同?
java中
volatile
变量
是什么?
volatile
变量
和atomic
变量
有什么不同?
【C/C++】易失
变量
、原子
变量
、寄存器
变量
的区别|
volatile
变量
与atomic
Volatile
变量
可以确保先行关系,即写操作会发生在后续的读操作之前, 但它并不 能保证原子性。例如用
volatile
修饰 count
变量
那么 count++ 操作就不是原子 性的。 而AtomicInteger 类提供的 atomic 方法可以让这种操作具有原子性如 getAndIncrement()方法会原子性的进行增量操作把当前值加一,其它数据类型 和引用
变量
也可以进行相似操作。 寄存器
变量
: 在c语言当中可以使用寄存器
变量
来优化程序的性能,最常见的是在一......
C语言
70,037
社区成员
243,247
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章