当前位置:网站首页>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
边栏推荐
- Go language, array, pointer, structure
- Go concurrency and channel
- Multi level cache usage
- PHP classes and objects
- Go language, condition, loop, function
- Do we media make money now? After reading this article, you will understand
- 一刷312-简单重复set-剑指 Offer 03. 数组中重复的数字(e)
- GRBL学习(一)
- C language --- advanced pointer
- [open source tool sharing] MCU debugging assistant (oscillograph / modification / log) - linkscope
猜你喜欢
Single architecture system re architecture
Read the meaning of serial port and various level signals
Do we media make money now? After reading this article, you will understand
一文读懂串口及各种电平信号含义
多生成树MSTP的配置
捡起MATLAB的第(4)天
Tencent offer has been taken. Don't miss the 99 algorithm high-frequency interview questions. 80% of them are lost in the algorithm
Best practices of Apache APIs IX high availability configuration center based on tidb
R语言中实现作图对象排列的函数总结
Implement default page
随机推荐
现在做自媒体能赚钱吗?看完这篇文章你就明白了
PS为图片添加纹理
捡起MATLAB的第(5)天
Metalife established a strategic partnership with ESTV and appointed its CEO Eric Yoon as a consultant
Modèle de Cluster MySQL et scénario d'application
Multi level cache usage
Simple usage of dlopen / dlsym / dlclose
布隆过滤器在亿级流量电商系统的应用
Why is IP direct connection prohibited in large-scale Internet
matplotlib教程05---操作图像
Cap theorem
一刷314-剑指 Offer 09. 用两个栈实现队列(e)
TIA博图——基本操作
Go language, array, pointer, structure
leetcode-396 旋转函数
API IX JWT auth plug-in has an error. Risk announcement of information disclosure in response (cve-2022-29266)
Method 2 of drawing ROC curve in R language: proc package
Deletes the least frequently occurring character in the string
Accumulation of applet knowledge points
C, calculation method and source program of bell number