- 问题内容:C++中的volatile做什么用的?(看书没看懂)
- 原讨论链接:http://community.csdn.net/expert/topicview1.asp?id=4340502
- 所属论坛:新手乐园 审核组:C/C++
- 提问者:iwodgirl 解决者:goodluckyxl
- 感谢:codearts、snowbirdfly、goodluckyxl
- 关键字:
- 答案:
#include<iostream.h>
#include<stdio.h>
class VolatileFun{
public :
int val;
volatile int f8();
};
volatile int VolatileFun::f8(){return val;}
void main()
{
VolatileFun s;
s.val=89;
volatile int i=s.f8();
i=23; //我自己加上去的,也可运行,且改变了i的值
cout<<i<<endl;
getchar();
}
新手问题,请知道的人指点!谢谢
---------------------------------------------------------------
1、volatile 是保证访问的变量不被编译器优化
比如申请的变量 a = 1; 如果嵌入汇编饶开编译器
将a地址内容1改变掉
而你不加volatile就还是原来的1
如果加了则会保证每次数据均是从a的地址处读出
4、寄存器操作一定要加! 一般的驱动程序里的端口操作也需要加, volatile只是保证你每次取变量地址都是从此变量的源地址取值! 比如声明 一个变量uint16 PortAddress=0x0001; 下面的代码中再也没有对 PortAddress进行赋值,如果没加 volatile,则你每次用PortAddress变量时系统会直接取1, 而不是去PortAddress的地址去取他的值,如果 PortAddress是硬件相关的,则可能会因为硬件的原因把他的值改变了(不再是0x0001),从而造成运行出错!
MY VIEW:
简单的一句话 取消编译器对此修饰变量的任何优化
所有对此数据操作都去相应地址中读写 而不会取自因优化而暂存的寄存器中