【发布时间】:2021-12-17 13:46:24
【问题描述】:
编译器能否优化 volatile 变量与自身的比较并假设它相等?或者它必须读取两次这个变量并比较它得到的两个值?
【问题讨论】:
-
我认为它需要读取两次,因为波动性的事实意味着它可以在任何两次访问之间发生变化。但是我手头没有任何可以给出权威答案的标准。
-
@SornelHaetir 从 C 的角度来看,读取甚至可以改变值。
-
严格来说,这取决于实现如何定义对 volatile 对象的访问。但是对于“正常”实现是的,编译器需要生成两个读取然后进行比较。该值可以在读取之间发生变化,甚至因为读取。
标签: c optimization compilation volatile