挥发性的

时间:2009-07-01 09:22:09

标签: c

  

可能重复:
  What is the difference between these declarations in C?

volatile的目的是什么?

1 个答案:

答案 0 :(得分:1)

Volatile基本上告诉编译器不要对你正在应用它的“对象”执行任何优化。

当可以在程序范围之外更改对象时,这很有用。

一个例子(还有其他例子)是嵌入式系统。假设您有一个带内存映射键盘的设备。每当用户按下某个键时,该键的ASCII代码就会显示在内存位置0xff00中(例如)。

所以你从代码开始:

char *kbdata = 0xff00;

然后,只要您想等待按下某个键,就可以进行轮询:

char key = *kbdata;
while (key == 0)
    key = *kbdata;

这里唯一的问题是编译器可能会发现代码中没有任何内容正在改变*kbdata,因此它可以优化访问,以便代码不再起作用。很可能它会将*kbdata加载到密钥中,然后进入无限循环。

通过将kbdata指定为volatile,编译器将确保它不会尝试优化对它的访问,并且代码应该按预期工作。