当前位置:网站首页>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
边栏推荐
- [AI weekly] NVIDIA designs chips with AI; The imperfect transformer needs to overcome the theoretical defect of self attention
- 贫困的无网地区怎么有钱建设网络?
- API IX JWT auth plug-in has an error. Risk announcement of information disclosure in response (cve-2022-29266)
- js正则判断域名或者IP的端口路径是否正确
- The length of the last word of the string
- One brush 313 sword finger offer 06 Print linked list from end to end (E)
- MetaLife与ESTV建立战略合作伙伴关系并任命其首席执行官Eric Yoon为顾问
- Website pressure measurement tools Apache AB, webbench, Apache jemeter
- Coalesce and repartition of spark operators
- Metalife established a strategic partnership with ESTV and appointed its CEO Eric Yoon as a consultant
猜你喜欢
Redis master-slave replication process
C language self compiled string processing function - string segmentation, string filling, etc
新动态:SmartMesh和MeshBox的合作新动向
多级缓存使用
One brush 314 sword finger offer 09 Implement queue (E) with two stacks
捡起MATLAB的第(7)天
Distinct use of spark operator
Best practices of Apache APIs IX high availability configuration center based on tidb
建设星际计算网络的愿景
捡起MATLAB的第(6)天
随机推荐
Ice -- source code analysis
How do you think the fund is REITs? Is it safe to buy the fund through the bank
js正則判斷域名或者IP的端口路徑是否正確
Spark 算子之distinct使用
Read the meaning of serial port and various level signals
API IX JWT auth plug-in has an error. Risk announcement of information disclosure in response (cve-2022-29266)
Control structure (I)
The principle and common methods of multithreading and the difference between thread and runnable
Load Balancer
GRBL学习(一)
Sortby use of spark operator
单体架构系统重新架构
[open source tool sharing] MCU debugging assistant (oscillograph / modification / log) - linkscope
Partitionby of spark operator
Method 2 of drawing ROC curve in R language: proc package
Accumulation of applet knowledge points
Intersection, union and difference sets of spark operators
mysql乐观锁解决并发冲突
幂等性的处理
s16.基于镜像仓库一键安装containerd脚本