C/C++ 中 volatile 关键字详解

volatile 关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改,比如:操作系统、硬件或者其它线程等。遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问。声明时语法:volatile int v; 当要求使用 volatile 声明的变量的值的时候,系统总是重新从它所在的内存读取数据,即使它前面的指令刚刚从该处读取过数据。而且读取的数据立刻被保存

复制代码
volatile int i=10;
int a = i;
...
// 其他代码,并未明确告诉编译器,对 i 进行过操作
int b = i;

volatile 指出 i 是随时可能发生变化的,每次使用它的时候必须从 i的地址中读取,因而编译器生成的汇编代码会重新从i的地址读取数据放在 b 中。而优化做法是,由于编译器发现两次从 i读数据的代码之间的代码没有对 i 进行过操作,它会自动把上次读的数据放在 b 中。而不是重新从 i 里面读。这样以来,如果 i是一个寄存器变量或者表示一个端口数据就容易出错,所以说 volatile 可以保证对特殊地址的稳定访问。

参考:C/C++ 中 volatile 关键字详解 | 菜鸟教程 (runoob.com)

相关推荐
大白话_NOI1 小时前
【洛谷 P1024 】[NOIP2001 提高组] 一元三次方程求解 - 详细分析与C++实现
c++·算法
随意起个昵称1 小时前
区间dp-进阶题目1(进阶合并)
c++·算法·动态规划
王老师青少年编程2 小时前
2022年CSP-X复赛真题及题解(T2:移动棋子)
c++·真题·csp·信奥赛·复赛·csp-x·移动棋子
玖玥拾2 小时前
C/C++ 数据结构(三)链表核心算法
c语言·数据结构·c++·链表
Sunsets_Red2 小时前
ABC462D 题解
c++·数学·编程·比赛·atcoder·信息学竞赛·信息学
keykey6.2 小时前
逻辑回归:从回归到分类
开发语言·人工智能·机器学习
喵星人工作室2 小时前
C++火影忍者1.1.8
开发语言·c++·游戏
shchojj2 小时前
ChatGPT Prompt Engineering for Developers - Expanding
开发语言·python·prompt
凡人叶枫2 小时前
Effective C++ 条款26:尽可能延后变量定义式的出现时间
linux·开发语言·c++·effective c++
加油码2 小时前
位图 BitMap:用一个 bit 管一个状态,空间直接省到位
c++·算法