c++ volatile关键字

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