从汇编角度理解volatile
来源:互联网 发布:java工程根目录 编辑:程序博客网 时间:2024/06/08 15:19
一般对于volatile的解释是这样的:将变量定义为volatile可以防止编译器对变量进行优化,每次均从内存中访问变量,而不是寄存器。既然让编译器优化可以提高访问速度,那为什么又要不用它以及什么时候不用它?其实主要是配合的问题,一个变量可能在寄存器中,也可能在内存中,如果程序只有一个执行流且没有跳转,那么变量不管放到内存还是寄存器,理论上在编译阶段编译器是能够知道变量的具体位置的,使用时就不会出现问题。事实上编译器是通过一个简单的规则来保证的:局部变量一般会放到寄存器中,全局变量在函数开始时必然是操作内存,之后可能是放入寄存器,到函数结束时必然将全局变量的值再写入内存(如果有写的话),这样每次函数调用时全局变量的最新值都在内存中,且都从内存中访问,保证了数据的一致性。但这种一致性在多执行流或有跳转的情况下就有问题了。目前程序的多执行流主要有:多线程和设备寄存器,跳转主要有:setjmp/longjmp,goto,信号处理,下面我们挨个情况来分析。
从汇编角度理解volatile
- 从汇编角度理解volatile
- 从汇编角度理解C++虚函数调用机制
- 从汇编看volatile
- 从汇编角度看计算机
- 从汇编角度来理解linux下多层函数调用堆栈运行状态
- 从汇编角度来理解linux下多层函数调用堆栈运行状态
- 从汇编的角度理解为什么c样式函数使用时,实参尽量使用指针传递
- 从汇编的底层代码实现角度深入理解形参和实参
- 从汇编的角度看段错误
- 从汇编的角度看栈
- 从汇编的角度看递归
- 从汇编角度看c++引用(reference)
- 通过汇编角度理解虚函数!
- 通过汇编角度理解虚函数
- 从关系角度理解SQL
- 从JVM角度理解线程
- 从信息论角度理解Softmax
- [链接]:从软件开发人员角度理解UML
- 消息中间件 Apache Qpid 简介,第 2 部分
- 毫无新意,美联储维持超低利率水平不变
- 头文件string与string.h的区别
- Lucene3.5例子
- linux内核的配置机制及其编译过程。
- 从汇编角度理解volatile
- NT分发调度
- Ant命令行与Build.xml实例
- WM_PAINT消息小结
- Failed to fetch URL https://dl-ssl.google.com/
- Android执行shell命令
- 使用CBaseFilter, CBaseInputPin和CBaseOutputPin写一个简单的Filter
- NAS FAQ
- 郭台铭:颤抖吧 Galaxy S III !