zoukankan      html  css  js  c++  java
  • 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 变量做任何的优化。

  • 相关阅读:
    华为机考--约瑟夫问题
    华为机考--字符串压缩
    2014华为校招机考模拟--求最大递增数
    2014华为校招机考模拟--记票统计
    插入排序与归并排序的C#实现
    步入C#--hello world
    shell 命令用法
    About compiling some source code on centos
    ubuntu Install packages
    ssh命令
  • 原文地址:https://www.cnblogs.com/tongyishu/p/13431687.html
Copyright © 2011-2022 走看看