【发布时间】:2014-07-26 20:02:17
【问题描述】:
C89 标准规定:
At sequence points volatile objects are stable in the sense that previous
evaluations are complete and subsequent evaluations have not yet occurred.
C89 标准还规定:
When the processing of the abstract machine is interrupted by receipt of a
signal, only the values of objects as of the previous sequence point may be
relied on.
这些要求让我感到困惑,因为我无法想象它们会如何 实际执行。我对x86-64只有一个初步的了解 汇编程序,但这就是我脑海中闪过的东西。假设我们有 一个易失的结构,它有很多千字节。如果您复制现有的 struct 到这个 C 中的 volatile 结构中,那么生成的机器代码可能 非常大。现在,假设这个大量的机器码是 执行,系统上的某些 shell 在 过程,引起一些信号的升高。我的理解(或者更确切地说是我的 猜测)是该过程将在复制中间中断,导致 对 volatile 的要求被破坏,并导致结构从 任何信号处理程序的视角。
显然,事情实际上并不是这样运作的,但它们实际上是如何运作的 工作?为了争论,请随意假设平台是 x86-64 或 x86 Linux、Windows、OS X 或其他一些常见的 UNIX。
【问题讨论】:
标签: c++ c linux signals volatile