volatile - (C语言)

volatile关键字和const一样都是一种类型修饰符,用它修饰过的变量表示可以被某些编译器未知的因素更改,比如操作系统、硬件或者是其它线程等。

该关键字是不希望被编译器优化,从而达到稳定访问内存的目的。

示例代码:

#include<stdio.h>int main()
{int i = 10;int j = i;int k = i;return 0;
}

 在程序运行起来后,查看反汇编(两个版本):

Debug

 Release --- 进行了代码优化

此时编译器对代码进行了优化,在 int j = i ; int k = i; 这两条语句中,i 没有被作为左值,编译器认为 i 值没有被修改,所以从内存中取出 i 的值赋值给 j 后,这个值并没有被丢掉,而是继续执行了下一条语句,对 k 进行赋值,此时,编译器不会生成新的汇编代码重新从内存中取 i 的值,提高了效率。(Debug)


与上述代码做对比,添加 volatile 后 --- 代码:

#include<stdio.h>int main()
{volatile int i = 10;int j = i;int k = i;return 0;
}

 在程序运行起来后,查看反汇编(两个版本):

Debug

Release --- 进行了代码优化

 

volatile 关键字告知编译器 i 可能随时发生变化,即每一次使用 i 值的时候,都必须从内存中读取出 i 的值。所以编译器生成的汇编代码会重新从 i 的地址处读取数据放在 k 中。(Debug)


 由上述现象可知,如果 i 时一个寄存器变量或者表示一个端口数据或者是多个线程的共享数据,就非常容易发生错误。所以 volatile 可以保证对特殊地址的稳定访问。


思考:const volatile int a = 10; // 该条语句会不会报错

const --- 要求你不要进行写入

volatile --- 在读取数据的时候每次都要从内存中读取

以上两者并不冲突,该代码不会报错

 


volatile变量的⼏个例⼦:
<1> :并⾏设备的硬件寄存器(如:状态寄存器)
<2>:⼀个中断服务⼦程序中会访问到的⾮⾃动变量(Non-automatic variables)
<3>: 多线程应⽤中被⼏个任务共享的变量




 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/351582.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

FL Studio21水果软件各个版本功能区别对比

作为音乐人&#xff0c;在电脑上进行编曲&#xff0c;混音&#xff0c;合成是家常便饭&#xff0c;而市面上大家常用的音乐编曲制作软件很多&#xff0c;小编在这里就给大家做一个推荐。 大家常听到的音乐编曲制作软件大多是Cubase、Nuendo、Pro Tools、 SONAR等等&#xff0c…

不能注册DLL/OCX:RegSvr32失败 0x5

为这个错误累死了&#xff0c;知道是权限的问题&#xff0c;但无从下手&#xff0c;查了一圏网上资料&#xff0c;包括在INNO SETUP安装配置文件中加入64位的标识之类的都做了&#xff0c;包括超级用户ADMINISTRATOR登录 &#xff0c;还有设置用户权利&#xff0c;没想到仅仅关…

牛客网刷题总结(1.有序序列判断,2.获得月份天数,3.矩阵相等判定,4.矩阵转换,5.井字棋判断输赢,6.递归进行进制转化)

&#x1f495;"痛苦难以避免&#xff0c;而磨难可以选择。"-->村上春树&#x1f495; 作者&#xff1a;Mylvzi 文章主要内容&#xff1a;数据在内存中的存储 目录 1.有序序列判断 题目描述&#xff1a; 分析过程&#xff1a; 代码实现&#xff1a; 2.获得月份…

rundll32.exe和regsvr32.exe

众所周知&#xff0c;DLL文件是不能独自运行的&#xff0c;需要被进程加载到其地址空间后才能执行。 那怎么运行一个DLL呢? 答案&#xff1a;可以借助Windows所提供的rundll32.exe或regsvr32.exe。 rundll32.exe 通过rundll32.exe可以直接调用DLL的导出函数来执行功能。 命令…

自实现Regsvr32注册dll功能

之前做的项目需要注册虚拟摄像头&#xff0c;但是有两个不足是&#xff1a; 在使用Regsvr32.exe注册虚拟摄像头dll时&#xff0c;即便选了“不再提醒”和“允许程序所有操作”后&#xff0c;仍然会被360拦截&#xff1b;使用.bat文件调用Regsvr32.exe时&#xff0c;.bat文件经…

从简历被拒到收割 8 个高薪 offer,我用了 3 个月...

半年前我一个小老弟从外包离职了&#xff0c;本以为有两年经验进个一般的公司没有问题的&#xff0c;结果人家一看是外包出来的&#xff0c;面试问的问题也不是很懂&#xff0c;简历被拒了好几次。还好这个小老弟没有气馁&#xff0c;在论坛博客和里面的大佬虚心学习&#xff0…

淘宝618每日一猜答案(6月5日) 淘宝大赢家今日答案

淘宝6月5日每日一猜答案是什么&#xff1f;&#xff0c;接下来也会给大家来介绍一下6月5日淘宝大赢家每日一猜的答案。 淘宝每日一猜6月5日答案分享 活动问题&#xff1a;亚特兰蒂斯体型最大的员工 活动答案&#xff1a;【白鲸】 注意&#xff1a;打开手机淘宝&#xff0c;搜…

Android 反编译工具 jadx-gui

jadx-gui 是一种基于 jadx 项目的图形界面工具&#xff0c;用于反编译 Android 应用程序的工具。通过使用jadx-gui&#xff0c;开发人员可以打开 APK&#xff08;Android应用程序包&#xff09;文件&#xff0c;并查看其反编译的源代码。这对于分析、理解和调试 Android 应用程…

红米K30 4G手机图纸 主板元件位号图

红米K30 4G手机图纸 主板元件位号图品牌小米型号K30 4G图纸类型 手机电路图 主板元件位号图 图纸格式PDF其他信息 K30 4G手机图纸包括&#xff1a; 手机电路原理图72页&#xff1b; 元器件位号图主板2页&#xff1b; 可放大缩小 复制搜索&#xff01; 如发现不能下载&#xff0…

小米3移动版卡在Android,小米3高通版能用移动卡吗

小米3高通版能用移动卡吗 小米3高通版能用移动卡。 针对小米3高通版能用移动卡吗的问题&#xff0c;小米3高通800版本的移动用户也是可以使用移动卡的&#xff0c;但是只能使用移动的2G的&#xff0c;不能使用3G的。 系统方面&#xff0c;小米3的操作系统是基于Android 4.2.1的…

用笔记本改装智能家居服务器,一年之后,改装4G版小米笔记本电脑的可行性

前面写过一篇《分析支持4G LTE的小米新款笔记本电脑的必要性》&#xff0c;昨天小米正式发布了这款4G版的笔记本电脑&#xff0c;大约增加了1200元钱&#xff0c;送全年48GB流量。 在我来说&#xff0c;支持4G上网是一件好事&#xff0c;但不是像苹果那样全网通&#xff0c;而且…

小米3刷android 5.0吗,小米4/小米3刷安卓5.0.2教程

不要羡慕谷歌的亲儿子们能刷上安卓5.0.2系统&#xff0c;小米用户可以刷原生的安卓的5.0.2系统了&#xff0c;小米手机的发烧友们可以一展身手了。下面下载吧小编就给大家带来了适配小米3、小米4的原生安卓5.0.2系统。 今天MIUI工程师秋叶随风ivan在微博上公布了自己定制的原生…

小米移动没有5G信号该如何处理

问题描述 小米移动手机卡使用过程中一直显示4G信号&#xff0c;无法使用5G信号 原因分析&#xff1a; 联通、电信取消了部分NSA网络&#xff0c;因此有部分地区只有SA网络覆盖。如果正在使用支持SA/NSA双模5G的手机&#xff0c;需要将手机升级至最新版本以支持SA网络。 解决方…

中国3大运营商4G频段大解析

中国的4G网络有两种制式&#xff0c;TD-LTE和FDD-LTE&#xff0c;TD-LTE是中国自己的标准&#xff08;只是相对的&#xff0c;这个标准我们的专利要多一些&#xff09;&#xff0c;所以是工信部重点推的。两种制式在技术上有啥区别呢&#xff1f;简单的说&#xff0c;FDD是分频…

米4用linux刷机救转,小米Mi4(小米4 电信4G版)手机快速救砖,线刷教程分享,小白轻松救活手机...

小米Mi4(小米4 电信4G版)手机变砖了怎么办?对于经常刷机的安卓玩家来说&#xff0c;碰到刷机失败导致小米Mi4(小米4 电信4G版)手机无法启动甚至无法进入recovery都是在所难免的事&#xff0c;这个时候我们就需要用到线刷大师了&#xff0c;它能轻松实现小米Mi4(小米4 电信4G版…

红米3用电信卡显示无服务器,红米3支持电信卡吗?红米3支持联通卡吗?

小米红米手机3支持电信卡吗 小米红米手机3支持电信卡。 小米红米手机3支持电信卡吗?小米红米手机3运行基于Android 5.1.1的MIUI 7系统&#xff0c;内置5套系统UI主题&#xff0c;支持随用户的心意自由选择5套系统UI&#xff0c;新增多项功能如可视化的文件夹管理&#xff0c;在…

3G、3GPP、LTE、4G解释

3G 3G是第三代移动通信技术&#xff0c;是指支持高速数据传输的蜂窝移动通讯技术。3G服务能够同时传送声音及数据信息。3G是将无线通信与国际互联网等多媒体通信结合的一代移动通信系统。 3GPP 3GPP是The 3rd Generation Partnership Project&#xff08;第三代合作伙伴计划&a…

善领dsa2020最新车机ce版_小米MIX 3 5G版成为首款获欧盟5G认证的骁龙855手机

↑↑↑点击上方蓝字订阅每日最新国产手机资讯 随着通信技术的不断发展&#xff0c;5G离我们越来越近。虽然5G网络在我国还没有正式商用&#xff0c;但是海外已经有部分国家和地区已经开始试用5G网络。因此许多国产品牌的5G手机都会选择在海外上市&#xff0c;小米MIX 3 5G版就是…

小米平板4(Plus) LTE 版本,开通话模式教程(MIUI)

小米平板4&#xff08;Plus&#xff09; LTE 版本&#xff0c;开通话模式教程&#xff08;MIUI&#xff09; 详细流程如下&#xff1a; 800咸鱼收台小米平板4 PLUS LTE一台&#xff0c;先升级至最新开发版。 解BL锁 百度搜索小米解锁 http://www.miui.com/unlock/index.html …

2/3/4/5G频段 带宽介绍

5G频率范围/频段/帧结构与带宽/保护带宽/NR频点号/UE发射功率 等NR相关知识介绍 Dengtao67_dz 2019-03-21 21:14:30 5916 收藏 8 一、保护带宽计算公式&#xff1a; Guardband保护带宽&#xff0c;计算公示&#xff1a;(CHBW x 1000 (kHz) - RB value x SCS x 12) / 2 - SCS…