C++ volatile关键字
volatile和const关键字一样,是一个类型修饰符,表示变量可以被编译器的某些未知因素修改,比如操作系统,硬件,某些线程等。遇到这个关键字声明的变量,编译器访问该变量的代码将不再进行优化,以提供对特殊地址的稳定访问。 有代码如下: int i = 10; int j = i;//语句1 int k = i;//语句2 这时候编译器进行代码优化,因为在语句1和语句2中,i不作为左值,编译器认为i的值没有发生变化,所以在语句1中将i的值取出赋给j之后i的值并未丢弃,而是在语句2中继续赋给k编译器不会产生汇编代码重新从i里面取值,这样做提高了效率,但是要注意,语句i要没有用作左值才行。而且编译器只在release模式下才对内存进行优化,在debug模式下volatile不会对内存进行优化。 有代码如下: int i = 1; int j = i; int k = i; volatile int a = 10; volatile int b = a; volatile int c = a; debug模式下的汇编代码: int i = 1; 010D17BE mov dword ptr [i],1 int j = i; 010D17C5 mov eax,dword ptr [i] 010D17C8 mov dword ptr [j],eax int k = i;