c volatile

volatile 的本意是“易变的”,因为访问寄存器要比访问内存单元快的多,所以编译器一般都会做减少存取内存的优化,但有可能会读脏数据。当要求使用volatile声明变量值的时候,系统总是重新从它所在的内存读取数据,即使它前面的指令刚刚从该处读取过数据。精确地说就是,遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问;如果不使用valatile,则编译器将对所声明的语句进行优化。简洁的说就是:volatile影响编译器编译的结果,用volatile声明的变量表示该变量随时可能发生变化,与该变量有关的运算,不要进行编译优化,以免出错。

示例:

  volatile int running = 1;
  ​
  while (running) {
      ; // TODO
  }

以上代码中,running 在定义之后没有再修改它的内容,如果变量 running 不加 volatile 关键字,running 会被编译器优化为一个常量(右值),当使用 gdb 进行调试,修改 running 的值(set running = 0)的时候,会报 Left operand of assignment is not an lvalue 的错误,因此此外霜 volatile 在此处的作用就是告诉编译器:不要对running 变量做任何的优化。

原文地址:https://www.cnblogs.com/tongyishu/p/13431687.html