【C++】volatile关键字的作用「建议收藏」

【C++】volatile关键字的作用「建议收藏」volatile的作用volatile关键字是防止在共享的空间发生读取的错误。只保证其可见性,不保证原子性;使用volatile指每次从内存中读取数据,而不是从编译器优化后的缓存中读取数据,简单来讲就是防止编译器优化。在单任务环境中,如果在两次读取变量之间不改变变量的值,编译器就会发生优化,会将RAM中的值赋值到寄存器中;由于访问寄存器的效率要高于RAM,所以在需要读取变量时,直接寄存器中…

大家好,又见面了,我是你们的朋友全栈君。

volatile的作用

volatile关键字是防止在共享的空间发生读取的错误。只保证其可见性,不保证原子性;使用volatile指每次从内存中读取数据,而不是从编译器优化后的缓存中读取数据,简单来讲就是防止编译器优化。

在单任务环境中,如果在两次读取变量之间不改变变量的值,编译器就会发生优化,会将RAM中的值赋值到寄存器中;由于访问寄存器的效率要高于RAM,所以在需要读取变量时,直接寄存器中获取变量的值,而不是从RAM中。

在多任务环境中,虽然在两次读取变量之间不改变变量的值,在一些情况下变量的值还是会发生改变,比如在发生中断程序或者有其他的线程。这时候如果编译器优化,依旧从寄存器中获取变量的值,修改的值就得不到及时的相应(在RAM还未将新的值赋值给寄存器,就已经获取到寄存器的值)。

#include <iostream>
using namespace std;

int main(int argc,char* argv[])
{
    int i=10;
    int a=i;
    cout<<a<<endl;
    _asm
    {
        mov dword ptr [ebp-4],80
    }
    int b=i;
    cout<<b<<endl;
}

输出结果:

10
10 

注:必须在Release版本在,在Release才会对代码进行优化 

要想防止编译器优化,就需要在声明变量i时前加volatile关键字,就会输出 10 80;加关键字后,就在RAM中读取变量的值,而不是直接在寄存器中取值

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/138439.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • visio2013专业版激活密匙[通俗易懂]

    visio2013专业版激活密匙[通俗易懂]Visio2013最新产品密钥分享,在安装时可以使用以下密钥:  2NYF6-QG2CY-9F8XC-GWMBW-29VV8  FJ2N7-W8TXC-JB8KB-DCQ7Q-7T7V3  VXX6C-DN3HQ-3CRXG…

    2022年6月24日
    90
  • Java学习之SpringMVC 拦截器

    Java学习之SpringMVC拦截器0x00前言继续SpringMVC最后一点小内容,后面就该学习如何整合SSM框架了。0x01拦截器拦截器和前面提到的一个过滤器类似,但是他们还是

    2021年12月12日
    51
  • 键值对pair「建议收藏」

    什么是pairpair类是C++标准库的一部分,它使得我们可以在一个对象的内部把相同类型或不同类型的两个值关联起来,它被包含在头文件unility中:pair类的结构大致如下:template&lt;classT1,classT2&gt;classpair{public:pair(T1v1,T2v2):first(v1),s…

    2022年4月8日
    119
  • 利用python itertools对列表实现排列组合

    利用python itertools对列表实现排列组合

    2021年11月23日
    47
  • sso单点登录系统实现原理(oauth2 单点登录原理)

    单点登录SSO(SingleSignOn)说得简单点就是在一个多系统共存的环境下,用户在一处登录后,就不用在其他系统中登录,也就是用户的一次登录能得到其他所有系统的信任。单点登录在大型网站里使用得非常频繁,例如像阿里巴巴这样的网站,在网站的背后是成百上千的子系统,用户一次操作或交易可能涉及到几十个子系统的协作,如果每个子系统都需要用户认证,不仅用户会疯掉,各子系统也会为这种重复认证授权的逻辑搞疯掉。实现单点登录说到底就是要解决如何产生和存储那个信任,再就是其他系统如何验证这个信任的有效性,因

    2022年4月14日
    177
  • 六、策略模式—旅行的交通工具 #和设计模式一起旅行#[通俗易懂]

    兵无常势,水无常形,能因敌变化而取胜者,谓之神! ——《孙子兵法》故事背景旅行开始,我和设计模式mm要去的目的地很多,去往不同目的地可以选择的交通工具也是多样的,从北京到上海,我们可以选择自驾游、乘坐飞机、高铁,甚至是骑单车等等方式!每一种交通工具到达目的的时间也不同,假如从北京到上海,乘坐飞机两个小时,高铁五个小时,自驾游3天(3*24小时),每一种交通费也不一样!假…

    2022年2月27日
    49

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号