当前位置:网站首页>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 .
边栏推荐
- 2022-07-04 mysql的高性能数据库引擎stonedb在centos7.9编译及运行
- memcached
- MySQL ---- first acquaintance with MySQL
- Management background --2 Classification list
- 机试刷题1
- 剪映+json解析将视频中的声音转换成文本
- 每日一题:力扣:225:用队列实现栈
- Unity3d minigame unity webgl transform plug-in converts wechat games to use dlopen, you need to use embedded 's problem
- 云原生技术--- 容器知识点
- 新手程序员该不该背代码?
猜你喜欢
labelimg的安装与使用
AdaViT——自适应选择计算结构的动态网络
Spatial domain and frequency domain image compression of images
Advantages of link local address in IPv6
Leetcode exercise - Sword finger offer 26 Substructure of tree
NPDP certification | how do product managers communicate across functions / teams?
二分图判定
(十八)LCD1602实验
leetcode:面试题 17.24. 子矩阵最大累加和(待研究)
The nearest common ancestor of binary (search) tree ●●
随机推荐
Clip +json parsing converts the sound in the video into text
关于声子和热输运计算中BORN电荷和non-analytic修正的问题
Mise en place d'un environnement de développement OP - tee basé sur qemuv8
Management background --4, delete classification
新手程序员该不该背代码?
Research and investment strategy report of China's VOCs catalyst industry (2022 Edition)
MySQL教程的天花板,收藏好,慢慢看
做国外LEAD2022年下半年几点建议
Advantages of link local address in IPv6
i. Mx6ull build boa server details and some of the problems encountered
What are the specific steps and schedule of IELTS speaking?
做接口测试都测什么?有哪些通用测试点?
The ceiling of MySQL tutorial. Collect it and take your time
Assembly and Interface Technology Experiment 6 - ADDA conversion experiment, AD acquisition system in interrupt mode
Chapter 3: detailed explanation of class loading process (class life cycle)
That's why you can't understand recursion
云原生技术--- 容器知识点
Notes de développement du matériel (10): flux de base du développement du matériel, fabrication d'un module USB à RS232 (9): création de la Bibliothèque d'emballage ch340g / max232 SOP - 16 et Associa
机试刷题1
C# 三种方式实现Socket数据接收