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

Netxpert xg2 helps you solve the problem of "Cabling installation and maintenance"

基于 QEMUv8 搭建 OP-TEE 开发环境

手写ABA遇到的坑
Learn the principle of database kernel from Oracle log parsing

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

硬件開發筆記(十): 硬件開發基本流程,制作一個USB轉RS232的模塊(九):創建CH340G/MAX232封裝庫sop-16並關聯原理圖元器件

Web APIs DOM time object

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

Chapter 4: talk about class loader again

自定义 swap 函数
随机推荐
Heavyweight news | softing fg-200 has obtained China 3C explosion-proof certification to provide safety assurance for customers' on-site testing
【LeetCode】19、 删除链表的倒数第 N 个结点
Should novice programmers memorize code?
变量与“零值”的比较
网络基础入门理解
Lora sync word settings
12、 Start process
Research and investment strategy report of China's VOCs catalyst industry (2022 Edition)
return 关键字
Self made j-flash burning tool -- QT calls jlinkarm DLL mode
关于声子和热输运计算中BORN电荷和non-analytic修正的问题
ThreadLocal详解
CocosCreator+TypeScripts自己写一个对象池
rust知识思维导图xmind
Balanced Multimodal Learning via On-the-fly Gradient Modulation(CVPR2022 oral)
Senior soft test (Information System Project Manager) high frequency test site: project quality management
Improving Multimodal Accuracy Through Modality Pre-training and Attention
图像的spatial domain 和 frequency domain 图像压缩
SQL Server生成自增序号
Management background --3, modify classification