为了提供对特殊地址的稳定访问。
[C] 纯文本查看 复制代码
1
2
3
|
int i=10; int j=i; //1 int k=i; //2 |
此时编译器对上面代码进行优化,因为在1、2语句中,i 没有被用作左值(没有被赋值)。这时候编译器认为i 的值没有发生改变,所以在1语句时从内存取出 i 的值赋给 j 之后,这个值没有被丢掉,而是在2语句中继续用这个值赋值给k。编译器不会生成汇编代码重新从内存里取 i ,这样提高了效率
[C] 纯文本查看 复制代码
1
2
3
|
volatile int i=10; int j=i; int k=i; |
volatile 关键字告诉编译器,i 是随时可能发生变化的,每次使用它的时候必须从内存取出 i 的值,因而编译器生成的汇编代码会重新从 i 的地址处读取数据放在k中。