C温故补缺(二):volatile
2024-09-07 23:53:59
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的作用:让编译器忽略代码优化
最新文章
- JavaScript标准参考教材(alpha)--笔记
- [CodeWars][JS]实现链式加法
- 一次性搞明白 service和factory区别
- 模拟下载的进度条ProgressBar
- mysql主从复制的一些东西的整理
- Z/OS遇到的错误
- SCCM日志存放路径
- XtraReport 实例化 打印
- webkit常见问题汇总
- Silverlight中弹出网页
- [Everyday Mathematics]20150203
- FireFox、chrome通过插件使用IE内核,IE Tab v2
- 将home多余的空间分配到";/";分区下
- Python网络编程篇之select和epoll
- MVC登出友情提示
- java.lang.String中[ ";张飞";+1+1 ] 和 [ ";张飞";+(1+1) ]
- SQL Server服务没有自动启动原因案例分析
- git 学习(4) ----- git rebase
- MSSQL sql server 2005/2008 row_number()函数应用之–删除表中重复记录,只保留一条不重复数据
- 理解JVM之Java内存区域