示例C代码演示了反汇编中的volatile?

And*_*zos 5 c volatile

什么是简短的说明性C程序,它演示了反汇编中易失性和非易失性之间的区别?

int main()
{
    volatile int x;

    ???
}
Run Code Online (Sandbox Code Playgroud)

VS

int main()
{
    int x;

    ???
}
Run Code Online (Sandbox Code Playgroud)

我们可以???用生成的代码不同来替换它们?

小智 7

例如:

x = 0;
Run Code Online (Sandbox Code Playgroud)

如果x不是volatile,编译器将看到它未被使用,并且可能x = 0;完全从生成的代码中作为优化消除它(语句或甚至变量本身).

但是,volatile关键字正是为了防止编译器执行此操作.它基本上告诉代码生成器"无论你认为这个变量是什么/做什么,不要再猜测我,我需要它." 因此,编译器会将volatile变量视为已访问,并将发出与表达式对应的实际代码.

  • 这是从具体到一般的"草率概括"的谬误.:) (2认同)