加载到缓存中的数据是否与缓存行大小对齐?

时间:2017-01-29 11:03:33

标签: memory cpu-cache

让我们说缓存行大小为64字节,并且我有一个大小也是64字节的对象。如果访问此对象,它将是:

  1. 全部加载到一个缓存行
  2. 只会加载对象开头和下一个64字节倍数之间的部分
  3. 该对象将加载到两个不同的缓存行
  4. 其他东西
  5. 我觉得答案因处理器而异,但现代CPU的最可能结果是什么?

1 个答案:

答案 0 :(得分:1)

当谈到机器指令级别时,更高级语言中可用的对象概念消失。通过更高级别的分配操作访问其成员将被转换为常规的读写指令。因此,如果运行时系统或该语言的虚拟机是智能的,并且能够分配对象以获得更好的缓存利用率(在您的情况下,为64字节对齐的地址),当更高级别的语言读取对象的任何成员时,在64字节对齐的地址内的任何地方,整个对象将被加载到高速缓存行(因为它在64字节对齐的地址处分配)。如果运行时系统是哑的,如果它只是按照程序流程中的请求分配对象,而不查看问题中提到的情况(64字节对象和64字节高速缓存行),那么当一个成员发生读取时对象,该成员的64字节对齐地址的数据将被加载到缓存中。因此,在后一种情况下,您需要幸运或编写代码,以便在对象的正面或背面放置特殊填充,以使其与缓存线对齐。