zoukankan      html  css  js  c++  java
  • Volatile的使用

      提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据,

      如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象。

      需要注意的是,没有volatile也可能能正常运行,但是可能修改了编译器的优化级别后又不能正常运行了,因此经常出现debug版本正常,但是release版本却不能正常的问题。

      所以为了安全起见,只要是等待别的程序修改某个变量的话,就加上volatile关键字,此外多线程操作也要考虑使用volatile

    volatile 的含义 

          volatile总是与优化有关,编译器有一种技术叫做数据流分析,分析程序中的变量在哪里赋值、在哪里使用、在哪里失效,分析结果可以用于常量合并,常量传播等优化,进一步可以使代码消除。

      但有时这些优化不是程序所需要的,这时可以用volatile关键字禁止做这些优化,volatile的字面含义是易变的,它有下面的作用: 

      1 不会在两个操作之间把volatile变量缓存在寄存器中。在多任务、中断、甚至setjmp环境下,变量可能被其他的程序改变,编译器自己无法知道,volatile就是告诉编译器这种情况。

      2 不做常量合并、常量传播等优化,所以像下面的代码: 

        volatile int i = 1; 

        if (i > 0) ... 

        if的条件不会当作无条件真。 

  • 相关阅读:
    em,pt和px之间的换算
    css中 中文字体(fontfamily)的标准英文名称
    HTML css面试题
    css实现的透明三角形
    JavaScript经典面试题系列
    C++ template 学习笔记(第二章)
    C++ template 学习笔记 (第五章)
    20120906
    C++ template 学习笔记(第十六章) 16.1 命名模版参数
    C++ template 学习笔记(第三,四章)
  • 原文地址:https://www.cnblogs.com/qianqiannian/p/6416407.html
Copyright © 2011-2022 走看看