无限循环条件变量是否应始终声明为volatile?

时间:2012-01-24 15:12:07

标签: c compiler-construction volatile compiler-optimization

考虑一下这种类型的代码,

while( !cond )
 ;

如果 cond 未声明为volatile,则编译器可以通过将其缓存在寄存器中来对其进行优化。在这种情况下,即使设置了 cond ,while循环仍将继续。

现在是否意味着任何此类变量应始终声明为 volatile ?为什么编译器不够聪明才能意识到它不应该缓存这些变量?

1 个答案:

答案 0 :(得分:10)

为什么不缓存变量?你不要在循环中改变它,所以它在C语言中等同于while (true);

也就是说,除非您的程序是多线程的,在这种情况下,变量可以在循环运行时进行更改而不执行任何操作。但是,C语言对线程一无所知(更一般地说,正如Lundin所说,关于任何未从main调用的函数或来自main中调用的函数等),所以你必须自己使用volatile来让C知道它不知道的事情正在发生。