首页 > 编程语言 > 详细

c++ volatile

时间:2019-03-24 15:29:03      阅读:148      评论:0      收藏:0      [点我收藏+]

就是每次都要到内存上读取数据,不能直接用寄存器的数据(第一次直接取自内存然后放在寄存器,第二次编译器就会优化成使用寄存器的值)

并不解决多线程的事

https://liam.page/2018/01/18/volatile-in-C-and-Cpp/

被 volatile 修饰的变量,在对其进行读写操作时,会引发一些可观测的副作用。而这些可观测的副作用,是由程序之外的因素决定的。

 

因此我们讲,在 C/C++ 中,对 volatile 对象的访问,有编译器优化上的副作用:

  • 不允许被优化消失(optimized out);
  • 于序列上在另一个对 volatile 对象的访问之前。

这里提及的「不允许被优化」表示对 volatile 变量的访问,编译器不能做任何假设和推理,都必须按部就班地与「内存」进行交互。因此,上述例中「复用寄存器中的值」就是不允许的。

 

  • volatile 不能解决多线程中的问题。
  • 按照 Hans Boehm & Nick Maclaren 的总结volatile 只在三种场合下是合适的。
    • 和信号处理(signal handler)相关的场合;
    • 和内存映射硬件(memory mapped hardware)相关的场合;
    • 和非本地跳转(setjmp 和 longjmp)相关的场合。

c++ volatile

原文:https://www.cnblogs.com/l2017/p/10588252.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!