volatile

参考:CSDN

volatile也是一个类型修饰符,被其修饰的变量意味着可以被某些编译器未知的因素修改,如操作系统,硬件,线程等.

当遇到volatile修饰的变量时,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问

如:

当while循环中的条件只是一个单独的变量时,就不存在判断每次循环后的判断.只有两种状态:死循环不循环.

当pass=1时,编译器就会优化次代码,将循环条件置为,后续不再从内存中读取pass值来判断循环是否停止

汇编代码:

cmp 用0和pass比较,只有相等时ZF=1,其他只要pass非零,ZF=0

而jne则时当ZF=0时跳转

所以,pass=0,则cmp 0,pass的结果ZF=1,jne不跳转

只要pass!=0,就跳转

但是,如果加上了volatile修饰

汇编代码:

添加volatile,不再放在存储器了,而是在寄存器中,每次都test

test:两个数按位与运算,只有所有位结果都是0,ZF=1

这就是volatile的作用:让编译器忽略代码优化

最新文章

  1. JavaScript标准参考教材(alpha)--笔记
  2. [CodeWars][JS]实现链式加法
  3. 一次性搞明白 service和factory区别
  4. 模拟下载的进度条ProgressBar
  5. mysql主从复制的一些东西的整理
  6. Z/OS遇到的错误
  7. SCCM日志存放路径
  8. XtraReport 实例化 打印
  9. webkit常见问题汇总
  10. Silverlight中弹出网页
  11. [Everyday Mathematics]20150203
  12. FireFox、chrome通过插件使用IE内核,IE Tab v2
  13. 将home多余的空间分配到"/"分区下
  14. Python网络编程篇之select和epoll
  15. MVC登出友情提示
  16. java.lang.String中[ "张飞"+1+1 ] 和 [ "张飞"+(1+1) ]
  17. SQL Server服务没有自动启动原因案例分析
  18. git 学习(4) ----- git rebase
  19. MSSQL sql server 2005/2008 row_number()函数应用之–删除表中重复记录,只保留一条不重复数据
  20. 理解JVM之Java内存区域

热门文章

  1. thinkphp5.1中适配百度富文本编辑器ueditor
  2. 萌新码农的第一篇:MarkDown的使用方法
  3. 俄罗斯的 HTTPS 证书问题
  4. 监控Redis集群,有两种方法
  5. KVM 下如何关闭 virbr0
  6. 第四章:Django表单 - 4:表单的Widgets
  7. spring boot http status 400
  8. Compass- 图形化界面客户端
  9. 使用Fluentd进行简单流处理
  10. 如何在linux下检测(自身)IP冲突