You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++11原子类型:是否在寄存器缓存可重复读,还是仅保证原子性?

C++11原子类型的重复读行为:缓存还是仅保证原子性?

针对问题:C++11中的原子类型是否会将可重复读操作缓存到寄存器中?还是仅保证原子性(即读操作不会被拆分为多个部分)?

结论是:MSVC++、clang++/clang-cl以及g++在使用memory_order_relaxed内存序的情况下,不会对原子读操作进行寄存器缓存——每一次load都会直接从内存(或缓存一致性协议维护的缓存)中读取,而非复用之前加载到寄存器的值。

以下是测试代码:

#include <atomic>

using namespace std;

int x( atomic_int const &ai )
{
    int
        a = ai.load( memory_order_relaxed ),
        b = ai.load( memory_order_relaxed );
    return a + b;
}

g++编译生成的汇编

movl    (%rdi), %edx
movl    (%rdi), %eax
addl    %edx, %eax
ret

clang-cl编译生成的汇编

mov eax, dword ptr [rcx]
add eax, dword ptr [rcx]
ret

MSVC(cl)编译生成的汇编

mov edx, DWORD PTR [rcx]
mov eax, DWORD PTR [rcx]
add eax, edx
ret 0

内容的提问来源于stack exchange,提问作者Edison von Myosotis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 08:02:38