当前位置: 首页 > news >正文

[C++] Volatile 和常量Const优化

Volatile的作用

volatile 表明某个变量的值可能在外部被改变,因此对这些变量的存取不能缓存到寄存器,每次使用时需要重新存取。

Const 和 Volatile的示例

示例1

int main()
{const int a = 1;int* pa = const_cast<int*>(&a);*pa = 4;cout << a << endl;cout << *pa << endl;
}

输出:

1
4

对const常量a, 通过访问地址把它的值修改了。
再直接调用a,它还是修改之前的值。

示例2

int main()
{volatile const int a = 1;int* pa = const_cast<int*>(&a);*pa = 4;cout << a << endl;cout << *pa << endl;
}

输出

4
4

通过volatile修饰const常量a。
对const常量a, 通过访问地址把它的值修改了。
再直接调用a,它是修改后的值。

示例3

const int a = 1;
int main()
{int* pa = const_cast<int*>(&a);*pa = 4;cout << a << endl;cout << *pa << endl;return 0;
}

输出
在这里插入图片描述
如果是全局const 常量,是不允许通过访问地址的方式修改的(可以访问地址读,但是不能写)。
所以也就不存在const优化,和volatile修饰的问题。

结论

以上就是volatile修饰符的作用,它告诉编译器它修饰的对象是一个会改变的值,不要对它进行优化。
如果不用volatile修饰,某些时候,编译器会对变量进行优化,会把它的值存储在寄存器(或者别的地方)方便快速读取。如果这个变量改变了,编译器还是从寄存器快速读取,就会发生问题。

参考

C和C++里的const常量、volatile修饰符的深层次说明 <- 挺详细,有时间建议看这个

http://www.lryc.cn/news/312707.html

相关文章:

  • 嵌入式学习day32 网络
  • 算法D33 | 贪心算法3 | 1005.K次取反后最大化的数组和 134. 加油站 135. 分发糖果
  • html地铁跑酷
  • 利用GPT开发应用001:GPT基础知识及LLM发展
  • Golang Ants 构建协程池
  • 【金三银四】面试题汇总(持续编写中)
  • Hive的数据存储
  • ORACLE 如何使用dblink实现跨库访问
  • Sentinel 面试题及答案整理,最新面试题
  • Qt在windows编译hiredis依赖库
  • 【工作向】protobuf编译生成pb.cc和pb.py文件
  • android 快速实现 垂直SeekBar(VerticalSeekBar)
  • 算法刷题day23:双指针
  • 学术论文GPT的源码解读与二次开发:从ChatPaper到gpt_academic
  • 报表生成器FastReport .Net用户指南:表达式(下)
  • JavaScript极速入门(1)
  • 鸿蒙Harmony应用开发—ArkTS声明式开发(通用属性:浮层)
  • Meta AI移动设备上部署LLM的新框架MobileLLM
  • 使用Tesseract-OCR对PDF等图片文件进行文字识别
  • 部署YOLOv8模型的实用常见场景
  • SpringBoot缓存
  • STC89C52串口通信详解
  • 基础算法|线性结构|前缀和学习
  • 设计模式之模版方法实践
  • sql中COALESCE函数详解
  • rust-analyzer报错“Failed to spawn one or more proc-macro servers,....“怎么解决?
  • Communications--9--一文读懂双机热备冗余原理
  • 可调恒定电流稳压器NSI50150ADT4G车规级LED驱动器 提供专业的汽车级照明解决方案
  • Unity中使用代码动态修改URP管线下的标准材质是否透明
  • 关于制作Python游戏全过程(汇总1)