全部博文(84)
分类: C/C++
2010-11-20 16:50:10
volatile int a; |
事实说话:
#include <stdio.h>
|
Debug模式的时候:
release模式的时候:
输出的结果明显表明,release模式下,编译器对代码进行了优化,第二次没有输出正确的i值。下面,我们把 i的声明加上volatile关键字,看看有什么变化:
#include <stdio.h> |
Debug模式的时候:
release模式的时候:
即:无论是debug模式还是release模式,输出都是i对应的原始内存的值。这说明这个关键字发挥了它的作用,使得编译器每次读取int变量a的时候都在a的原始内存地址中读取数据,而不在寄存器中读取。
最后一点:volatile一般用在什么地方?
1.用来修饰硬件寄存器。如:
#define rUTXH0 (*(volatile unsigned int *)0x50000020) |
2.用来修饰中断子程序中会访问到的非自动变量(Non-automatic variables)
3.多线程应用中被几个任务共享的变量
总结:
请问你对volatile有什么了解?
--volatile的本意为多变的,用来修饰变量类型,这样就可以避免编译器自作多情的优化所产生的错误后果,使得每次读取变量的值的时候都到变量的内存地址中去读取,而不是到某个寄存器中读数据。