缓存行大小的权衡
更新时间:2026-10-01。line 是缓存与内存间的传输块,粒度大小直接影响带宽和多核行为。
本文要回答的问题
- 行更大不是局部性更好吗,为什么不全做大?
- false sharing 为什么和行大小强相关?
一、大行的利
利用空间局部性(顺序访问附近字节很可能接着用),一笔突发传输多行摊薄地址/标签开销,标签占用比例下降。
二、大行的弊
冷启动 miss 要搬更多字节、若只用其中一点则浪费带宽;跨行/大行会增加同组冲突、拉单缺失代价;多核下不同核只写同一行不同变量会互相无效化(false sharing),行越大越易踩中。这也是主流多取 64B 的折中。
三、常见坑
- 只看到局部性收益忽视带宽浪费。
- 多核热数据不按行对齐/填充。
- 对跨步很大的访问仍假设大行有利。
小结
行大小是局部性收益与传输浪费/伪共享的折中,主流 64B,多核热结构要按行对齐。下一篇 预取器原理。
总结
缓存行是缓存与内存之间的传输块:行越大越能利用空间局部性、摊薄标签开销,但冷启动要搬更多无用字节、组内冲突更重,多核下不同核写同一行不同变量造成的 false sharing 和写放大也越容易踩中——行业因此多收敛到 64B 这个折中值。行大小没有最优解,只有局部性收益与传输浪费、伪共享代价之间的权衡,多核热数据务必按行对齐填充。