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

问题描述 投票:0回答:1

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

while( !cond )
 ;

如果 cond 没有声明为 volatile,编译器可以通过将其缓存在寄存器中来优化它。在这种情况下,即使设置了 cond,while 循环也会继续。

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

c compiler-optimization volatile
1个回答
10
投票

为什么它不缓存变量?您不会在循环中更改它,因此在 C 看来,它相当于

while (true);

也就是说,除非您的程序是多线程的,在这种情况下,变量can可以在循环运行且不执行任何操作时更改。然而,C 语言对线程一无所知(更一般地说,正如 Lundin 所说,关于任何不是从

main
调用的函数或从
main
中调用的函数等),所以你必须自己使用
volatile
让 C 知道正在发生一些它不知道的事情。

© www.soinside.com 2019 - 2024. All rights reserved.