volatile关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改 ,比如:操作系统、硬件或者其它线程等。遇到这个关键字声明的变量,编译器对访问该变量的 代码就不再进行优化,从而可以提供对特殊地址的稳定访问。 int _tmain(int argc, _TCHAR* argv[]) { volatile int i=10; //int i = 10; int a = i; printf("i= %d/n",a); //下面汇编语句的作用就是改变内存中i的值,但是又不让编译器知道 __asm { mov dword ptr [ebp-4], 20h } int b = i; printf("i= %d/n",b); } 没有使用volatile的时候,我的vs2008编译器在debug和release下输出都是10 使用volatile的时候,我的vs2008编译器在debug版本下输出10,10;release版本下输出10,32