C 缓存友好的数据布局
更新时间:2026-10-01。配合 04-struct-alignment 与 缓存机制,这是 C 程序员最有性价比的优化。
一、AoS 与 SoA
- AoS:
struct {x,y,z} p[N],访问一个对象全部字段时连续,友好。 - SoA:
struct { float x[N], y[N], z[N]; },只遍历 x(如 SIMD 算)时不载入 y/z,省带宽且利于向量化。
二、布局规则
热字段相邻且靠前、冷字段拆到平行数组;按访问模式而非“面向对象直觉”组织;大数组分块处理提升复用。

三、常见坑
- 遍历只用一个字段却载入整个胖结构。
- 随意声明顺序引入填充。
- 改布局后不测量。
小结
总结
缓存友好的数据布局是 C 程序员性价比最高的优化:需要整体访问一个对象的全部字段时用 AoS(连续),只扫某几列(尤其配合 SIMD)时用 SoA(不载入无关列、省带宽、利于向量化);再按访问模式把热字段相邻靠前、冷字段拆到平行数组做冷热分离、注意字段排序减少填充、大数组分块提升复用,最后用 perf 实测 MPKI 来验证,而不是凭"面向对象直觉"组织数据。