- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我想问一下,在 8 位内存字段上使用 CMPXCHG
指令是否在任何方面都比在 32 位字段上使用它更糟糕。
我正在使用 C11 stdatomic.h 来实现几个同步方法。
最佳答案
不,lock cmpxchg [mem], reg
8 与 32 位 没有任何惩罚。现代 x86 CPU 可以加载并存储到它们的 L1d 缓存中,与对齐的 dword 或 qword 相比,单个字节没有损失。 Can modern x86 hardware not store a single byte to memory?答案:它可以零惩罚1,因为它们花费晶体管来使未对齐的加载/存储更快。
与 [u]int32_t
相比,处理寄存器中窄整数的周围 asm 指令如果有任何额外成本也应该可以忽略不计。参见 Why doesn't GCC use partial registers? - 大多数编译器都知道如何小心使用部分寄存器,而现代 CPU(Haswell 及更高版本,以及所有非 Intel 处理器)不会将低位 8 与寄存器的其余部分分开重命名,因此唯一的危险是错误的依赖性。根据您正在做的事情,最好将 unsigned
本地临时文件与 _Atomic uint8_t
一起使用,或者最好让您的本地人也 uint8_t
.
脚注 1:与某些非 x86 CPU 不同,在这些 CPU 中,字节存储实际上是通过缓存 RMW 周期 (Are there any modern CPUs where a cached byte store is actually slower than a word store?) 实现的。在那些 CPU 上,您希望 atomic xchg 对于字和字节来说同样便宜,但是对于 cmpxchg 来说,这太过分了。但是几乎所有非 x86 ISA 都有 LL/SC 而不是 xchg/cmpxchg,所以即使是原子交换也是单独的 LL 和 SC 指令,并且 SC 将需要一个 RMW 周期来提交到缓存。
关于c - 在 8 位字段上使用 CMPXCHG 指令在任何方面都比在 32 位字段上更糟糕吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58213995/
我想在这里说的是我在从之前离开的相同状态重新启动我的应用程序时遇到的问题。我在这方面做了很多研发,并且已经解决了 stackoverflow 中发布的问题。所以请不要说它是重复的。 我试过设置这些选项
当我在我的类中实现 __cmp__ 函数时,python 是否会在内部重载“==”,我们在 C++ 中是如何做到的? 只是好奇。我是 python 的新手。 :) 最佳答案 ==的含义当您定义 __c
我在 Raspberry Pi2 上安装了 Gitlab,几个月来它运行良好。但自从关闭了RPi的电源后,它就不再起作用了。网页返回502错误。 502 Whoops, GitLab is takin
有人知道用户登陆带有Webfonts的页面时为什么Google Chrome浏览器崩溃吗 它并不会一直发生,而是经常发生 我刚得到一个蓝屏页面,却不知道为什么:该页面不是来自重定向时就很好了。 这是我
当我登录时,Skype始终会给出此错误。 糟糕,Skype存在问题。尝试注销然后重新登录。 STARTUP_LOAD_ERROR MACBOOK 最佳答案 Macbook 用户 退出Skype 回家
我正在尝试从 flutter 开始,首先我在 cmd 上运行 flutter doctor 它有效。在我安装了 ANDROID SDK 之后,同样的命令 flutter doctor 给了我异常:
从 android studio 终端运行 flutter attach 不工作。显示错误flutter 意外退出。 终端输出: flutter attach Checking for adverti
当使用 TinyMCE 4 测试所有浏览器时,Chrome 非常慢。 (我尝试从 TinyMCE 中删除所有插件,但没有任何区别。) Chrome 需要大约 20-25 秒在 TinyMCE 中呈现一
我试图让下面的脚本工作,以便从远程服务器(服务器 1)读取特定目录中的 CSV 文件列表,并将数据移植到另一台服务器的 PostgreSQL 数据库中。 我已经创建了一个 rsa SSH key 并将
在嵌入式 linux 环境中(在 PowerPC 上定制的 2.4.25)几个小时后我得到以下内核 panic : Oops: kernel access of bad area, sig: 11 N
在将现有 Node.js (Hapi.js) + RethinkDB 从 OVH VPS(最小 vps)迁移到 AWS Lambda( Node )+ DynamoDB 的过程中,我最近遇到了一个非常
我是一名优秀的程序员,十分优秀!