volatile的介绍 直接处理硬件的程序常常包含该关键字,它们的值由程序之外的过程控制。
volatile告诉编译器编译不对该对象进行优化,volatile 变量是随时可能发生变化的,与volatile变量有关的运算,不要进行编译优化,以免出错,(VC++ 在产生release版可执行码时会进行编译优化,加volatile关键字的变量有关的运算,将不进行编译优化。)。 

#include <stdio.h>

void main()
{
	volatile int i = 10;
	int a = i;

	printf("i = %d\n", a);
	__asm {
		mov dword ptr[ebp - 4], 20h
	}

	int b = i;
	printf("i = %d\n", b);
}

输出:10,32


volatile的主要作用是:提示编译器该对象的值有可能在编译器未监测的情况下被改变。   表示用volatile定义的变量会在程序外被改变,每次都必须从内存中读取,而不能把他放在cache或寄存器中重复使用。

volatile类似于大家所熟知的const也是一个类型修饰符。volatile是给编译器的指示来说明对它所修饰的对象不应该执行优化。volatile的作用就是用来进行多线程编程。在单线程中那就是只能起到限制编译器优化的作用。

volatile用在如下的几个地方: 
1) 中断服务程序中修改的供其它程序检测的变量需要加volatile; 
2) 多任务环境下各任务间共享的标志应该加volatile; 
3) 存储器映射的硬件寄存器通常也要加volatile说明,因为每次对它的读写都可能由不同意义;