当前位置:网站首页>Volatile keyword
Volatile keyword
2022-07-06 22:31:00 【It's Beichen not too PI acridine】
volatile keyword
volatile Key words and const It is also a type modifier , The variable modified by it indicates that it can be changed by some unknown factors of the compiler , Like the operating system 、 Hardware or other threads . Encountered the variable declared by this keyword , The compiler no longer optimizes the code that accesses the variable , It can provide stable access to special addresses .
Let's take a look at the following example :
int i=10;
int j = i; //(1) sentence
int k = i; //(2) sentence
At this time, the compiler optimizes the code , Because in (1)、(2) In two statements ,i Not used as an lvalue . At this time, the compiler thinks i The value of has not changed , So in (1) Statement is fetched from memory i The value is assigned to j after , This value has not been lost , But in (2) Continue to use this value to k assignment . The compiler will not generate assembly code and fetch it from memory again i Value , This improves efficiency . But should pay attention to :(1)、(2) Between sentences i Not used as an lvalue .
Another example :
volatile int i=10;
int j = i; //(3) sentence
int k = i; //(4) sentence
volatile The keyword tells the compiler i It can change at any time , Every time you use it, you must take it out of memory i Value , Therefore, the assembly code generated by the compiler will be restarted from i Read the data at the address of and put it in k in .
So it looks like , If i It is a register variable or represents a port data or shared data of multiple threads , It's easy to make mistakes , So volatile It can guarantee stable access to special addresses .
const volatile int i=10; Is there a problem with this line of code ? without , that i What is the attribute ?
Answer one : No problem , For example, read-only status registers . It is volatile, Because it can be changed unexpectedly ; It is const, Because the program should not try to modify it .volatile and const Not contradictory , But the scope of control is different , One is outside the program itself , The other is the program itself .
Answer two : That's all right. ,const and volatile These two type qualifiers are not contradictory .const Express ( Runtime ) Constant semantics : By const The modified object cannot be modified in its scope , The compiler is not interested in trying to modify directly const The expression of the object will cause compilation errors .volatile Express “ Changeable ”, That is, at run time, the object may be modified outside the control flow of the current program context ( For example, it is modified by other threads in multithreading ; The memory of the object may be randomly modified by multiple hardware devices ): By volatile Decorated object , The compiler will not optimize the operation of this object . An object can be simultaneously const and volatile modification , Indicates that this object embodies constant semantics , But at the same time, it may be modified unexpectedly by the program context of the current object .
边栏推荐
- Lora sync word settings
- Balanced Multimodal Learning via On-the-fly Gradient Modulation(CVPR2022 oral)
- 第3章:类的加载过程(类的生命周期)详解
- 【编译原理】做了一半的LR(0)分析器
- 重磅新闻 | Softing FG-200获得中国3C防爆认证 为客户现场测试提供安全保障
- UDP编程
- Daily question 1: force deduction: 225: realize stack with queue
- 机试刷题1
- 关于声子和热输运计算中BORN电荷和non-analytic修正的问题
- China 1,4-cyclohexanedimethanol (CHDM) industry research and investment decision-making report (2022 Edition)
猜你喜欢
Management background --3, modify classification
Aardio - 利用customPlus库+plus构造一个多按钮组件
Management background --4, delete classification
在IPv6中 链路本地地址的优势
pytorch_YOLOX剪枝【附代码】
将MySQL的表数据纯净方式导出
树的先序中序后序遍历
HDR image reconstruction from a single exposure using deep CNN reading notes
机试刷题1
Aardio - 封装库时批量处理属性与回调函数的方法
随机推荐
leetcode:面试题 17.24. 子矩阵最大累加和(待研究)
Chapter 4: talk about class loader again
每日一题:力扣:225:用队列实现栈
Self made j-flash burning tool -- QT calls jlinkarm DLL mode
RESNET rs: Google takes the lead in tuning RESNET, and its performance comprehensively surpasses efficientnet series | 2021 arXiv
Unity3d minigame-unity-webgl-transform插件转换微信小游戏报错To use dlopen, you need to use Emscripten‘s...问题
【无标题】
树的先序中序后序遍历
小程序系统更新提示,并强制小程序重启并使用新版本
HDR image reconstruction from a single exposure using deep CNN reading notes
The SQL response is slow. What are your troubleshooting ideas?
Data storage (1)
剑指offer刷题记录1
Assembly and Interface Technology Experiment 6 - ADDA conversion experiment, AD acquisition system in interrupt mode
中国固态氧化物燃料电池技术进展与发展前景报告(2022版)
NPDP认证|产品经理如何跨职能/跨团队沟通?
第3章:类的加载过程(类的生命周期)详解
uniapp滑动到一定的高度后固定某个元素到顶部效果demo(整理)
二分图判定
MySQL教程的天花板,收藏好,慢慢看