为了提供对特殊地址的稳定访问。

[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中。

posted on 2018-02-28 13:30  windy_net  阅读(4661)  评论(0编辑  收藏  举报