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

Memory 加载到缓存中的数据是否与缓存线大小对齐?,memory,cpu-cache,Memory,Cpu Cache,假设缓存线的大小是64字节,我有一个对象的大小也是64字节。如果访问此对象,它将是: 全部加载到一个缓存线中 仅加载对象开头和下一个64字节倍数之间的部分 对象将加载到两个不同的缓存线中 别的 我有一种感觉,答案因处理器而异,但现代CPU最有可能的结果是什么?当涉及到机器指令级时,在更高级语言中可用的对象概念消失了。通过更高级别的分配操作访问其成员将转换为常规的读写指令。因此,如果运行时系统或该语言的虚拟机是智能的,并且能够将对象分配到64字节对齐的地址中以获得更好的缓存利用率,那么当更高级别的

假设缓存线的大小是64字节,我有一个对象的大小也是64字节。如果访问此对象,它将是:

  • 全部加载到一个缓存线中
  • 仅加载对象开头和下一个64字节倍数之间的部分
  • 对象将加载到两个不同的缓存线中
  • 别的

  • 我有一种感觉,答案因处理器而异,但现代CPU最有可能的结果是什么?

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