volatile关键字的使用你真的了解吗?
volatile
关键字是用来防止编译器对一个变量优化,因为有时对变量优化会造成我们不期望的结果。网上很多的说法是强制访问内存中的值,而不是缓存中的。注意,这里的缓存不是指cache,而是cpu寄存器(R0~R15)。除此之外,我们必须明确,volatile
行为在编译阶段,而非程序运行阶段(面试高频题)。所以我们对volatile
最直观的认识可以是看汇编代码。下面会讲。那什么时候会用volatile?一般有下面几种情况:
- 操作寄存器。一般指外设寄存器等。
- 中断。中断中使用的全局变量。
- 多线程中被几个任务共享的变量。
小面我们就用几个例程来展示它的作用。
第一种现象:编译器会优化掉某些语句,典型的应用是操作寄存器。
char DataReg;
void main(