c++ volatile

volatile用于修饰变量,阻止编译器优化,确保每次读写都直接从内存进行,常用于中断服务程序、多任务环境下的共享标志和硬件寄存器。volatile也可应用于防止单例模式中的重排序问题。
摘要由CSDN通过智能技术生成

volatile

  • volatile是关键字,用来修饰变量
  • 作用
    • 禁止编译器对变量的优化。
      • 编译器在优化代码时,会对变量的读取和写入进行优化,例如将变量从内存加载到寄存器中进行操作,以提高执行效率,但是对于volatile修饰的变量,编译器不能进行这些优化,以确保对变量的每次读写操作都是直接从内存中进行的
      • 一般而言,编译器发现两次从i读取数据的代码之间没有对i进行过操作,会自动把上次读的数据在这次使用,而不是重新从内存中进行读取。而volatile就保证了每次都是从内存中进行读取
  • 使用方式volatile int a = 10;
  • volatile常用的位置
    • 中断服务程序中修改的供其他程序检测的变量需要加volatile
    • 多任务环境下各任务间共享的标志应该加volatile
    • 存储器映射的硬件寄存器通常也要加volatile说明,因为每次对它的读写都能有不同意义
  • 类似于const,volatile在指针方面也存在两种表示方法
int* volatile a1;
volatile int* a2;
  • int* volatile a1;表示a1是一个指针变量,指向一个int类型的对象,并且这个指针本身是volatile
  • volatile int* a2; 表示a2是一个指针变量,指向一个volatile int类型的对象
  • 单例模式中会出现reorder问题,可以使用volatile进行解决
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孙建钊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值