memory_order
这个是 C++11 里原子操作(std::atomic
)的一个关键参数,用来告诉编译器和 CPU:我希望这个原子操作在多线程里的内存可见性和执行顺序是怎样的。
-
memory_order_relaxed
-
memory_order_consume
-
memory_order_acquire
-
memory_order_release
-
memory_order_acq_rel
-
memory_order_seq_cst
层级 | 容量 | 速度 | 特点 |
---|---|---|---|
L1 | 32KB左右 | 最快 | 每个核心独立,分指令/数据缓存 |
L2 | 256KB-1MB | 中速 | 每个核心独立 |
L3 | 几 MB-几十 MB | 慢 | 多核心共享,主存访问缓冲 |
-
最小缓存单位,通常 64 字节
-
CPU 一次性读取整行到缓存
-
高频访问变量在同一缓存行 → 可能发生 伪共享(False Sharing)
指定变量或类型的对齐方式
-
AoS (Array of Structures):每个对象的所有字段连续
-
SoA (Structure of Arrays):同一字段的所有对象连续
// AoS
struct Tick { double price; int volume; };
std::vector<Tick> ticks;
// SoA
std::vector<double> prices;
std::vector<int> volumes;
set(CMAKE_EXPORT_COMPILE_COMMANDS ON) # 生成compile_commands.json