加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

使用volatile for setjmp / longjmp的性能开销

发布时间:2020-12-15 08:44:53 所属栏目:Java 来源:网络整理
导读:要使setjmp / longjmp起作用,您需要将局部变量声明为volatile.如果有人用-O3编译其代码,那么volatile变量对性能的影响是多少.在x86多核平台上它会是巨大的还是只有一点点? 在我看来,它只会增加一点点开销,因为挥发性变量仍然可以缓存,无论如何从缓存读取/写
要使setjmp / longjmp起作用,您需要将局部变量声明为volatile.如果有人用-O3编译其代码,那么volatile变量对性能的影响是多少.在x86多核平台上它会是巨大的还是只有一点点?

在我看来,它只会增加一点点开销,因为挥发性变量仍然可以缓存,无论如何从缓存读取/写入都非常快.意见?

解决方法

简而言之,volatile的语义都依赖于平台/编译器.在某些编译器(如带有IA64体系结构的MSVC)上,volatile关键字不仅可以防止编译器重新排序操作,还可以使用获取/释放语义执行每个读/写操作,这意味着存在有效的内存屏障操作.另一方面,GCC只能阻止编译器在读取/写入易失性存储器位置之前/之后重新排序操作…在具有弱存储器模型的平台上,获取释放语义不像它们那样维护MSVC.

现在在x86上,由于其严格排序的内存模型,使用volatile关键字存在内存障碍不是问题,因此主要的缺点就是缺少重新排序和其他可能的优化由编译器执行.话虽如此,它将取决于您的代码是什么样的.例如,如果您的代码中存在紧密循环,并且某些volatile限定变量实际上是循环不变量,那么如果这些内存位置被限定为非变量,那么您将无法获得编译器可以执行的一些优化. -volatile.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读