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

编程知识 行业动态 更新时间:2024-06-13 00:22:39

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

C语言关键字volatile

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

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

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

volatile的本意是“易变的”,由于访问寄存器的速度要快过RAM,所以编译器一般都会作减少存取外部RAM的优化
https://blog.csdn/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

更多推荐

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

本文发布于:2023-04-02 21:52:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/b89a5e10cb5e45dc391e5b26273d7367.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:编译器   又是   是怎么   详解   如何防止

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!