C中的volatile变量

时间:2014-12-07 02:35:05

标签: c system

如果我将C代码中的所有变量声明为volatile,会发生什么?

据我所知,volatile的实现方式是特定于实现的,底线是编译器不能信任它可能具有的任何变量副本。因此,如果我要将所有变量声明为volatile,则程序可能会更大并且运行速度更慢。

如果我这样做,还有其他问题吗?

1 个答案:

答案 0 :(得分:2)

如果您正在开发从控制寄存器读取标志或指向该位置的驱动程序,则应该关注。

这些寄存器中的一些具有特殊属性,仅通过读取它们来清除或设置其他标志。然后使用volatile会破坏你的代码。

我不认为将所有变量声明为volatile是个好主意。其中两个原因已经给出:更大的代码和更慢的运行。

更糟糕的是没有想到。您将成为最后和最后的专业人员,他们会查看某个地方并进行适当的编程以防止运行条件破坏您的代码。将所有声明声明为volatile只会将其推迟到您将来无法跟踪的错误。

声明volatile:

  • 共享变量
  • 通过编译器优化您的代码(对于旧的编译器......现在他们已经非常好了,因为在优化时不允许出错..但无论如何都需要明确)
  • 多线程共享变量