首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么x86在glibc中不使用__volatile的读写障碍?

为什么x86在glibc中不使用__volatile的读写障碍?
EN

Stack Overflow用户
提问于 2020-09-29 09:02:14
回答 1查看 192关注 0票数 2

我正在学习glibc (版本是2.32)。至于内存障碍,x86的读、写和全障碍如下:

代码语言:javascript
运行
复制
#define atomic_full_barrier() \
    __asm __volatile (LOCK_PREFIX "orl $0, (%%" SP_REG ")" ::: "memory")
#define atomic_read_barrier() __asm ("" ::: "memory")
#define atomic_write_barrier() __asm ("" ::: "memory")

正如优先选择这个答案所说,volatile告诉编译器不要优化和重新排序这个指令。

为什么写和读屏障不使用__asm __volatile,而全障碍使用它?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-29 09:08:58

没有输出操作数的asm语句是隐式volatile (GCC手册)。

因此,它们实际上都是volatile,这对于优化器不删除它们是必要的。

(非volatile asm被假定为没有副作用的纯函数,只有在需要时才运行以产生输出。只有当/当优化器决定需要运行asm语句时,才会对其进行重击)。

不同的作者选择或多或少的明确。如果您是git blame,我希望您会看到它们是在不同的时间和/或由不同的人编写的。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64116260

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档