【发布时间】:2021-12-02 00:44:58
【问题描述】:
最近我正在开发一个“搜索系统”,而关于内存/缓存性能的一些事情让我感到困惑。 假设我的机器信息:x86 架构(L1-3 缓存,64 字节缓存线),Linux 操作系统
CPU每次读取64个字节(缓存行),那么CPU从内存地址(到缓存)读取数据总是64倍吗?例如0x00(到0x3F),0x40(到0x7f)。如果我需要位于 0x20 的数据(int32_t),那么系统仍然需要加载 0x00--0x3F。
这个案例怎么样:struct Obj{int64_t a[5];char b[2];}; 然后定义int64_t c[5]; Obj obj; int64_t d;
虚拟内存(或物理内存?)会这样组织吗?
【问题讨论】:
-
这是两个截然不同的问题。请专注于其中一个。
-
我删除了关于 Linux 的平板分配器的完全独立的问题。如果需要,请单独询问。现有答案仅解决了我在编辑后留下的一个问题。
标签: c++ c x86 memory-alignment cpu-cache