自动变量怎么可能是易失性的?

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

我知道在文件范围定义的

volatile
变量。不允许编译器对这些变量做出假设。它们几乎可以随时更改,并且编译器不得优化变量的读取。

现在我找到了这段代码

BOOL InstallHandler()
{
    volatile BOOL b_bulk_erase = FALSE;
    volatile BOOL b_test_read_write = FALSE;
    volatile BOOL b_continue = TRUE;
    ...
    if (b_test_read_write)
    {
        read();
        write();
    }
}

volatile
如何对应于堆栈的变量,即由一个线程拥有的变量?

编辑:

对于一个线程拥有的情况,我想表达该变量没有公开。该地址没有提供给其他任何东西。它不被任何其他线程使用。

c
2个回答
5
投票

好吧,我意识到了 volatile 的意图。

该函数是与硬件设备通信的设备驱动程序的一部分。正常操作期间不使用功能

read
write

但是,当开发人员在调试器中运行程序时,她可以在

if
子句中设置断点,并使用调试器更改变量。这将允许操纵执行并调用
read
write

volatile
抑制了可能的优化,因为
if
子句测试 const 表达式。如果没有
volatile
,整个
if
可能不会出现在代码中。


4
投票

仅仅因为,虽然变量本身位于单个线程中,但没有什么可以阻止您将其地址提供给其他线程。因此无法预见的修改。

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