【发布时间】:2011-04-05 23:55:10
【问题描述】:
我正在查找关键字volatile 及其用途,得到的答案差不多是:
用于防止编译器优化掉代码。
有一些示例,例如在轮询内存映射硬件时:如果没有volatile,轮询循环将被删除,因为编译器可能会认识到条件值永远不会改变。但是由于只有一个或两个示例,这让我开始思考:是否还有其他情况需要使用volatile 来避免不必要的优化?条件变量是唯一需要volatile 的地方吗?
我认为优化是特定于编译器的,因此未在 C++ 规范中指定。这是否意味着我们必须凭直觉说 嗯,如果我不将该变量声明为 volatile 或者是否有任何明确的规则,我怀疑我的编译器会取消这个由?
【问题讨论】:
-
“不要使用
volatile”是可接受的规则吗?因为它是一个相当不错的。并不是说volatile永远不会有用。只是,一般来说,如果您不确定是否需要它,您可能不需要。 -
@Dennis:+1,并在我的回答中这样评论。
-
@DennisZickefoose "“不要使用
volatile”是一个可接受的规则吗?" 我会说:除非有一些官方标准,否则不要使用volatile,参考文本或文档告诉您这样做。 -
条件变量不需要
volatile。条件变量具有库支持(Win32、pthread、boost、std...)并使用互斥锁完全锁定。
标签: c++ optimization volatile