zoukankan      html  css  js  c++  java
  • C++中的volatile做什么用的?(看书没看懂)

    • 问题内容:C++中的volatile做什么用的?(看书没看懂)
    • 原讨论链接:http://community.csdn.net/expert/topicview1.asp?id=4340502
    • 所属论坛:新手乐园     审核组:C/C++
    • 提问者:iwodgirl     解决者:goodluckyxl
    • 感谢:codearts、snowbirdfly、goodluckyxl
    • 关键字:
    • 答案:

      #include<iostream.h>
      #include<stdio.h>
      class VolatileFun{
          public :
              int val;
              volatile int f8();
      };

      volatile int VolatileFun::f8(){return val;}

      void main()
      {
          VolatileFun s;
          s.val=89;
          volatile int i=s.f8();
          i=23;                   //我自己加上去的,也可运行,且改变了i的值
          cout<<i<<endl;
          getchar();
      }

      新手问题,请知道的人指点!谢谢
      ---------------------------------------------------------------
      1、volatile 是保证访问的变量不被编译器优化
      比如申请的变量 a = 1; 如果嵌入汇编饶开编译器
      将a地址内容1改变掉
      而你不加volatile就还是原来的1 
      如果加了则会保证每次数据均是从a的地址处读出 
      4、寄存器操作一定要加!  一般的驱动程序里的端口操作也需要加, volatile只是保证你每次取变量地址都是从此变量的源地址取值!  比如声明 一个变量uint16 PortAddress=0x0001;  下面的代码中再也没有对 PortAddress进行赋值,如果没加 volatile,则你每次用PortAddress变量时系统会直接取1, 而不是去PortAddress的地址去取他的值,如果 PortAddress是硬件相关的,则可能会因为硬件的原因把他的值改变了(不再是0x0001),从而造成运行出错!

      MY VIEW: 
           简单的一句话 取消编译器对此修饰变量的任何优化
           所有对此数据操作都去相应地址中读写 而不会取自因优化而暂存的寄存器中

  • 相关阅读:
    vue安装过程
    es6 Array数组方法
    初始化 CSS 样式
    css新增伪类
    常浏览器兼容性问题与解决方案
    CSS3高级
    php总结
    php环境和使用方法
    [书籍介绍] Python网络数据采集_PDF电子书下载 高清 带索引书签目录_(美)Ryan Mitchell著_北京
    深度学习与计算机视觉应用实战课程
  • 原文地址:https://www.cnblogs.com/bayonetxxx/p/1568598.html
Copyright © 2011-2022 走看看