2

在引导加载程序代码中,我发现它们在访问物理地址时使用了 volatile 关键字。即使我们正在访问物理内存地址,是否有必要使用 volatile 关键字?

4

3 回答 3

2

每当数据可以更改时,您都需要使用“volatile”,而编译器无法知道它。

于 2013-07-08T10:58:52.577 回答
1

这是为了禁用编译器优化并仅获取当前值。当前值的含义仅是系统将获取当前值,即使在之前的指令中使用了来自同一对象的值。

于 2013-07-08T11:03:30.080 回答
0

有什么方法可以在编译器不知道的情况下更改此物理地址的内容(当编译器仅检查您的本地代码时)?如果是,那么您必须使用 volatile 关键字——否则您无法确定编译器是否会真正读取内存。

对于物理地址,例如设备寄存器,您确实需要使用 volatile 关键字。

于 2013-07-08T10:57:29.333 回答