详解C/C++中volatile关键字 编译器优化 是怎么优化的? volatile又是如何防止编译器优化的

详解C/C++中volatile关键字

C语言关键字volatile

C语言关键字volatile(注意它是用来修饰变量而不是上面介绍的volatile)表明某个变量的值可能在外部被改变,因此对这些变量的存取不能缓存到寄存器,每次使用时需要重新存取。该关键字在多线程环境下经常使用,因为在编写多线程的程序时,同一个变量可能被多个线程修改,而程序通过该变量同步各个线程,

也就是说,线程一和线程二使用同一个变量、
但是由于编译器优化,导致线程一更改该变量后,将其缓存在寄存器中,还没来得及其更新到内存中,线程二使用到该变量时,从内存中读取该变量,就无法获取到该变量的真实值。

为什么要做这种优化?
因为cpu从寄存器中读写数据远快于cpu从内存中读写数据,
线程一使用完该变量后,就将其存放在了寄存器,然而线程二并不知道线程一把该变量放在了寄存器中,还傻傻的从内存中读取该变量,肯定读不到正确的值(即更新后的值)

volatile的本意是“易变的”,由于访问寄存器的速度要快过RAM,所以编译器一般都会作减少存取外部RAM的优化
https://blog.csdn.net/weixin_44363885/article/details/92838607?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164238237016780261926922%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=164238237016780261926922&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduend~default-3-92838607.first_rank_v2_pc_rank_v29&utm_term=volatile%E5%85%B3%E9%94%AE%E5%AD%97%E7%9A%84%E4%BD%9C%E7%94%A8+c&spm=1018.2226.3001.4187

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
C语言关键字volatile用来修饰变量,通常用于建立语言级别的内存屏障。volatile关键字的作用是告诉编译器该变量的值可能会在意料之外的时候被改变,因此编译器在对该变量进行优化时应该谨慎处理。 volatile关键字可以与const关键字配合使用,用来修饰常量变量。除了基本类型外,用户定义的类型也可以使用volatile来修饰。一个被volatile修饰的类只能访问由类的实现者控制的接口子集,用户只能通过const_cast来获取对类型接口的完全访问。此外,volatile关键字与const一样,会从类传递到它的成员。 总结来说,volatile关键字用来修饰可能会在意料之外被改变的变量,告诉编译器优化时要谨慎处理该变量。它还可以与const关键字配合使用来修饰常量变量和用户定义的类型。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [c++volatile详解](https://blog.csdn.net/qq_36333986/article/details/109061550)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [C++volatile和mutable关键字用法详解](https://download.csdn.net/download/weixin_38530995/12743640)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

学无止境2022

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

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

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

打赏作者

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

抵扣说明:

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

余额充值