volatile int i=10; 
int j = i;
...
int k = i; volatile 告诉编译器i是随时可能发生变化的,每次使用它的时候必须从i的地址中读取,因而编译器生成的可执行码会重新从i的地址读取数据放在k中。 volatile 影响编译器编译的结果,指出,volatile 变量是随时可能发生变化的,与volatile变量有关的运算,不要进行编译优化,以免出错,(VC++ 在产生release版可执行码时会进行编译优化,加volatile关键字的变量有关的运算,将不进行编译优化。)。 其中编译器编译优化是:
由于编译器发现两次从i读数据的代码之间的代码没有对i进行过操作,它会自动把上次读的数据放在k中。而不是重新从i里面读。这样以来,如果i是一个寄存器变量或者表示一个端口数据就容易出错,所以说volatile可以保证对特殊地址的稳定访问,不会出错。

最新文章

  1. 网站中使用echart
  2. 自定义置顶TOP按钮
  3. 数据库知识整理<六>
  4. 网络编程:socket--python核心编程(3),chapter 1
  5. ZOJ 3805 (树形DP)
  6. Sqlcompletefree
  7. Google Guava学习笔记——基础工具类针对Object类的使用
  8. ARPU_百度百科
  9. Ubuntu 16.04安装Matlab 2016b教程
  10. Python学习--Python变量类型
  11. Ubuntu18.04安装Python虚拟环境
  12. 纯js自动批量引入js、css插件,支持自定义参数
  13. Java 初学UDP传输
  14. 10.1牛客J题
  15. AngularJS移动端页面input无法输入
  16. Turn the Rectangles 1008B
  17. java环境配置及原理详解
  18. activity 概念认知
  19. aspx代码审计-2
  20. net项目调试时,读取主干或其他项目代码问题

热门文章

  1. channel Golang
  2. 三、jQuery--jQuery基础--jQuery基础课程--第12章 jQuery在线聊天室
  3. P1111 修复公路
  4. Linux 2.6的内核编译过程
  5. java客户端连接MongoDB数据库的简单使用
  6. 【CF】174 Div.1 B Cow Program
  7. 探索Windows Azure 监控和自动伸缩系列3 - 启用Azure监控扩展收集自定义监控数据
  8. C++的拷贝构造函数、operator=运算符重载,深拷贝和浅拷贝、explicit关键字
  9. bzoj5250 [2018多省省队联测]秘密袭击
  10. syso快捷键设置
  11. Oracle索引之Btree索引
  12. C++的正则
  13. ES6 Promise 全面总结
  14. Python tab键命令补全
  15. 002 在大数据中基础的llinux基本命令
  16. ReactiveCocoa入门教程--第二部分
  17. Problem C: 平面上的点——Point类 (III)
  18. Redis持久化实践及灾难恢复模拟 [转]
  19. Spark2.1.0——深入浅出度量系统
  20. SVN服务器搭建和使用-转载