当前位置:网站首页>register和volatile的区别
register和volatile的区别
2022-08-02 17:57:00 【liebecl】
volatile
volatile说明变量在程序执行中可被隐含地改变。
就针对编译器而言,volatile所做的就是要求变量必须保存在内存中,而不允许被编译器进行优化放入缓存或者寄存器等等。
变量如果没有加入volatile修饰,可能会被编译器优化后写入缓存或者寄存器等等。在多线程情况下,并且多个线程对这个变量会进行频繁读写的话,那就会出现脏数据。即,如果一个线程修改了这个变量的值,但是变量新值还未及时更新到缓存或者寄存器时,另外一个线程一旦访问缓存或者寄存器,就会获取没有及时更新的脏数据。就有可能出现严重的错误。
register
register声明寄存器变量。
register这个关键字的工作和volatile恰恰相反。
就是变量要求写入寄存器中。这种方式特别适用于不需要经常修改,但是会被频繁访问的变量,这样可以一定程度上提高访问效率。在ANSI C语言中,由于用了register,变量需要写入寄存器而不在内存中,所以利用&取址运算符是无法获取地址的,即,&取址运算符不能用于register修饰的变量。
————
2022/07/31
家中
边栏推荐
猜你喜欢
随机推荐
golang刷leetcode 字符串(4)逆波兰式
redis总结_多级缓存
成功部署工业物联网的五个关键
Code Inspection for DevOps
租房小程序自动定位城市
How Tencent architects explained: The principle of Redis high-performance communication (essential version)
golang源码分析(19)简单编译器-计算器
企业云成本管控,你真的做对了吗?
Wechat Gymnasium Appointment Mini Program Graduation Design Finished Works (7) Mid-term Inspection Report
宝塔搭建实测-基于ThinkPHP5.1的wms进销存源码
STL案例-招聘新员工
记一次 .NET 某工控自动化控制系统 卡死分析
mysql四种隔离级别
技术人生 | 如何画业务大图
IDEA相关配置(特别完整)看完此篇就将所有的IDEA的相关配置都配置好了、设置鼠标滚轮修改字体大小、设置鼠标悬浮提示、设置主题、设置窗体及菜单的字体及字体大小、设置编辑区主题、通过插件更换主题
Technical life | How to draw a big picture of business
Interviewer: can you talk about optimistic locking and pessimistic locks
下载mysql的源码包
Simulink脚本自动创建Autosar Parameter Port及Mapping
codeforces:E. Add Modulo 10【状态压缩 + 找规律】









