当前位置:网站首页>Meaning and usage of volatile
Meaning and usage of volatile
2022-04-23 15:55:00 【Sola_ Ex】
volatile The meaning and usage of
Preface
I was asked a few days ago volatile This problem , To tell you the truth, I'm right volatile In fact, it is only limited to the level of preventing from being optimized by the compiler , But I don't know what kind of situation it actually needs to be applied to , So yesterday volatile I studied again , Also decided to write it down and record it .
volatile The definition of
volatile Is a feature modifier , It is a keyword on the compiler , Just follow static、const equally . Its ultimate goal is to prevent the instruction to be executed from being optimized by the compiler .volatile The variable is that it can be changed unexpectedly , such , The compiler will not assume the value of this variable .
effect
It doesn't work very miraculously , Take an example ,
EX1:
In a program like this :
AX_1 = 0;
AX_1 = 1;
AX_1 = 2;
AX_1 = 3;
AX_1 = 4;
No idea , Last AX_1 The value of is 4, But if I ask you , In this code ,AX_1 Have you ever experienced from 0-4 The change of ? The answer is not necessarily , Why? ? Because in different compiler environments , The optimization level of code is different , Even some can be set to no optimization effect . Use Keil As an example ,

Many optimization levels will directly default to -O3 Level of , The higher the optimization level , The size of the resulting firmware may also be smaller , But when programming , I don't pay attention to many details , Will be directly optimized by the compiler . Of course , Under such conditions ,AX_1 It's impossible, manager 0-4 Changing , It will be omitted directly 0-3 The change of , It arrived directly 4. In fact, I also have a question here , hypothesis AX_1 It's a status register ? Of course, it is not common to assign values to registers in this way .
EX2:
Emergencies , Such as interruption .
Actually from volatile The italics in the definition of ,“ This variable may be changed unexpectedly ”, Interruption is doing something like this ? For interrupts , Events can be executed periodically , It can also be executed cyclically , But it's all a sudden treatment , If you suddenly enter the interrupt , Then modify a value , It's actually an unexpected change , Sudden . So for the variables that need to be modified , Use volatile To modify , This problem can be well avoided , Of course, reducing the compiler optimization level may also be achieved , However, such areas that need to be optimized by the compiler have not been optimized , It's a waste of memory , So it's a good thing to write more standardized .
版权声明
本文为[Sola_ Ex]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/04/202204231554163833.html
边栏推荐
- [section 5 if and for]
- Ice -- source code analysis
- Sortby use of spark operator
- mysql乐观锁解决并发冲突
- 5 minutes, turn your excel into an online database, the magic cube net table Excel database
- How can poor areas without networks have money to build networks?
- 捡起MATLAB的第(7)天
- JS regular détermine si le nom de domaine ou le chemin de port IP est correct
- Use bitnami PostgreSQL docker image to quickly set up stream replication clusters
- Neodynamic Barcode Professional for WPF V11.0
猜你喜欢

Modèle de Cluster MySQL et scénario d'application

Timing model: gated cyclic unit network (Gru)

MySQL - execution process of MySQL query statement

Ice -- source code analysis

5分钟,把你的Excel变成在线数据库,神奇的魔方网表excel数据库

The biggest winner is China Telecom. Why do people dislike China Mobile and China Unicom?

Neodynamic Barcode Professional for WPF V11.0

Metalife established a strategic partnership with ESTV and appointed its CEO Eric Yoon as a consultant

Function summary of drawing object arrangement in R language

R语言中绘制ROC曲线方法二:pROC包
随机推荐
一刷314-剑指 Offer 09. 用两个栈实现队列(e)
幂等性的处理
C language --- string + memory function
R语言中绘制ROC曲线方法二:pROC包
Config组件学习笔记
Vision of building interstellar computing network
[split of recursive number] n points K, split of limited range
运维流程有多重要,听说一年能省下200万?
Control structure (I)
一文读懂串口及各种电平信号含义
Accumulation of applet knowledge points
matplotlib教程05---操作图像
保姆级Anaconda安装教程
王启亨谈Web3.0与价值互联网“通证交换”
MySQL - execution process of MySQL query statement
leetcode-374 猜数字大小
捡起MATLAB的第(8)天
Temporal model: long-term and short-term memory network (LSTM)
捡起MATLAB的第(10)天
MySQL optimistic lock to solve concurrency conflict