当前位置:网站首页>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 .
边栏推荐
猜你喜欢

PVL EDI project case

Aardio - 不声明直接传float数值的方法

Crawler obtains real estate data

Leetcode: interview question 17.24 Maximum cumulative sum of submatrix (to be studied)

MySQL ---- first acquaintance with MySQL

树的先序中序后序遍历

leetcode:面试题 17.24. 子矩阵最大累加和(待研究)

Assembly and Interface Technology Experiment 6 - ADDA conversion experiment, AD acquisition system in interrupt mode

Export MySQL table data in pure mode

Hardware development notes (10): basic process of hardware development, making a USB to RS232 module (9): create ch340g/max232 package library sop-16 and associate principle primitive devices
随机推荐
【雅思口语】安娜口语学习记录part1
基於 QEMUv8 搭建 OP-TEE 開發環境
memcached
Hardware development notes (10): basic process of hardware development, making a USB to RS232 module (9): create ch340g/max232 package library sop-16 and associate principle primitive devices
雅思口语的具体步骤和时间安排是什么样的?
Learn the principle of database kernel from Oracle log parsing
void关键字
Web APIs DOM time object
Management background --2 Classification list
leetcode:面试题 17.24. 子矩阵最大累加和(待研究)
Applet system update prompt, and force the applet to restart and use the new version
Classification, function and usage of MySQL constraints
Management background --3, modify classification
Lora sync word settings
重磅新闻 | Softing FG-200获得中国3C防爆认证 为客户现场测试提供安全保障
NPDP certification | how do product managers communicate across functions / teams?
UE4蓝图学习篇(四)--流程控制ForLoop和WhileLoop
Aardio - 封装库时批量处理属性与回调函数的方法
i. Mx6ull build boa server details and some of the problems encountered
config:invalid signature 解决办法和问题排查详解