打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
C/C++关键词 - volatile
userphoto

2022.05.28 江西

关注

volatile关键字是一个类型修饰符。

用它声明的类型变量表示随时可能被某编译器未知的因素的修改。比如OS,hardware or other threads.简单来说,如果一个变量使用了volatile进行修饰,那么每次去读取该值的时候是从对应的地址中去读取,而不会因为编译器发现程序中间没有对该值进行操作所以不从内存而是从上次读到的数据进行操作(这个就是编译器的优化,而使用了volatile关键字表示编译器不对次进行优化,每次都从对应的内存中读取)。这样就保证了对特殊地址的稳定访问。

代码演示如下:

demo1:不带 volatile 修饰符

demo2:带 volatile 修饰符

volatile使用场景

1、中断服务程序中修改的供其他程序检测的变量

  • 2、多任务环境下各任务之间共享的变量

  • 3、存储器映射的硬件寄存器

  • 4、有些变量是用 volatile 关键字声明的。当两个线程都要用到某一个变量且该变量的值会改变时,应该用 volatile 声明,该关键字的作用是防止优化编译器把变量从内存装入 CPU 寄存器中。如果变量被装入寄存器,那么两个线程有可能一个使用内存中的变量,一个使用寄存器中的变量,这会造成程序的错误执行。volatile 的意思是让编译器每次操作该变量时一定要从内存中真正取出,而不是使用已经存在寄存器中的值。

  • volatile指针

    1、volatile int * p;
  • 修饰指针指向的对象、数据是volatile的

2、char* volatile p;

修饰指针自身的值——代表地址的整数变量

注意事项

  • 1、非volatile int值可以赋值给volatile int,反之不行。

  • 2、C++中一个有volatile标识符的类只能访问它接口的子集,一个由类的实现者控制的子集。用户只能用const_cast来获得对类型接口的完全访问。此外,volatile向const一样会从类传递到它的成员

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
详细解释 volatile
volatile关键字
C语言中volatile关键字-学院-黑基网
C语言的5种存储类以及关键字volatile、restrict
C语言中关键字volatile追根问底
C语言丨深入理解volatile关键字
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服