[应用相关] C语言中volatile是什么意思啊

[复制链接]
天马兰兰 发表于 2012-7-17 17:32 | 显示全部楼层
顶,挺实用的。
sunnyzhaosyz 发表于 2012-7-21 14:12 | 显示全部楼层
学习了。。
浇花人123 发表于 2012-7-22 21:15 | 显示全部楼层
volatile变量主要用在以下几个方面:
(1)并行设备的硬件寄存器(如状态寄存器);
(2)一个中断服务子程序中会访问到的非自动变量;
(3)多线程应用中被几个任务共享的变量。


9楼的到位
xujing19870807 发表于 2012-7-25 14:48 | 显示全部楼层
我也不知道
O寥艺O 发表于 2012-7-30 13:39 | 显示全部楼层
学习了
xudingguo 发表于 2012-7-30 13:55 | 显示全部楼层
很有用,实际用到的时候才会深有体会
schenglong 发表于 2012-7-31 19:29 | 显示全部楼层
同求解释
hawksabre 发表于 2012-8-2 18:23 | 显示全部楼层
volatile 影响编译器编译的结果,指出,volatile 变量是随时可能发生变化的,与volatile变量有关的运算,不要进行编译优化,以免出错,(VC++ 在产生release版可执行码时会进行编译优化,加volatile关键字的变量有关的运算,将不进行编译优化。)。

例如:
volatile int i=10;
int j = i;
...
int k = i;

volatile 告诉编译器i是随时可能发生变化的,每次使用它的时候必须从i的地址中读取,因而编译器生成的可执行码会重新从i的地址读取数据放在k中。

而优化做法是,由于编译器发现两次从i读数据的代码之间的代码没有对i进行过操作,它会自动把上次读的数据放在k中。而不是重新从i里面读。这样以来,如果i是一个寄存器变量或者表示一个端口数据就容易出错,所以说volatile可以保证对特殊地址的稳定访问,不会出错。
O寥艺O 发表于 2012-8-3 22:00 | 显示全部楼层
学习了
将臣归邪 发表于 2012-8-4 16:27 | 显示全部楼层
CPU 要访问 数据A,CPU就要寻址找到存数据A的内存取数据,如果CPU要经常用到数据A,那么编译器就会把数据A做一份拷贝放到cache中(寄存器),这样CPU访问数据A的速度就快很多了,而不是每次都要通过寻址去到数据A的内存中取数。

1、CPU -> 内存A(存着数据A)
2、CPU -> 寄存器(有数据A的拷贝)

如果在数据A前面加了volatile ,不过数据A用得多么频繁,都只能是  1、CPU -> 内存A(存着数据A)的方式取数,而不能够是2、CPU -> 寄存器(有数据A的拷贝)。

CPU到寄存器取数远比到内存中取数快,这或许是编译器会优化经常用到变量的原因。
将臣归邪 发表于 2012-8-4 18:35 | 显示全部楼层
2# 王紫豪

哇哦,看到你了:)
jjssunjie 发表于 2012-8-10 15:48 | 显示全部楼层
速度快垃圾的两块大陆打 啊的交啊空间
fjzzclc 发表于 2012-8-14 15:44 | 显示全部楼层
学习了
joyhung 发表于 2012-8-22 16:56 | 显示全部楼层
留名
nashouat 发表于 2012-8-22 20:12 | 显示全部楼层
volatile 影响编译器编译的结果,指出,volatile 变量是随时可能发生变化的,与volatile变量有关的运算,不要进行编译优化,以免出错,(VC++ 在产生release版可执行码时会进行编译优化,加volatile关键字的变量有关的运算,将不进行编译优化。)。

例如:
volatile int i=10;
int j = i;
...
int k = i;

volatile 告诉编译器i是随时可能发生变化的,每次使用它的时候必须从i的地址中读取,因而编译器生成的可执行码会重新从i的地址读取数据放在k中。

而优化做法是,由于编译器发现两次从i读数据的代码之间的代码没有对i进行过操作,它会自动把上次读的数据放在k中。而不是重新从i里面读。这样以来,如果i是一个寄存器变量或者表示一个端口数据就容易出错,所以说volatile可以保证对特殊地址的稳定访问,不会出错
yy251745080 发表于 2012-8-29 23:40 | 显示全部楼层
原来如此。
callhgd 发表于 2012-8-30 22:15 | 显示全部楼层
学习,学习。。。。
原野牧歌 发表于 2012-9-1 15:28 | 显示全部楼层
学习了,从来没有考虑过这个问题……
xzyandrew 发表于 2012-9-3 11:24 | 显示全部楼层
很不错  学习了
秋风式街球 发表于 2012-9-7 00:56 | 显示全部楼层
受教了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部