为什么C中需要挥发性?它的用途是什么?它会做什么?


当前回答

Volatile也很有用,当你想强制编译器不优化特定的代码序列时(例如编写一个微基准测试)。

其他回答

简单来说,它告诉编译器不要对特定变量做任何优化。映射到设备寄存器的变量由设备间接修改。在这种情况下,必须使用volatile。

它不允许编译器自动改变变量的值。易失性变量用于动态使用。

Volatile也很有用,当你想强制编译器不优化特定的代码序列时(例如编写一个微基准测试)。

volatile的另一个用途是信号处理程序。如果你有这样的代码:

int quit = 0;
while (!quit)
{
    /* very small loop which is completely visible to the compiler */
}

编译器可以注意到循环体没有触及quit变量,并将循环转换为while (true)循环。即使在信号处理程序上为SIGINT和SIGTERM设置了退出变量;编译器无法知道这一点。

但是,如果quit变量被声明为volatile,编译器将被迫每次加载它,因为它可以在其他地方修改。这正是你在这种情况下想要的。

维基上有关于volatile的所有信息:

Volatile(计算机编程)

Linux内核的文档也对volatile做了一个很好的标记:

为什么不应该使用“volatile”类型类