2017-01-29 55 views
1

假设缓存行大小为64字节,并且我有一个大小也是64字节的对象。如果该对象被访问时,这将是:数据是否加载到与高速缓存行大小对齐的高速缓存中?

  1. 所有加载到一个高速缓存行
  2. 只有对象的开始和64个字节的倍数之间的部分将被加载
  3. 对象将被装入两个不同的高速缓存行
  4. 别的东西

我有一种感觉,答案从不同处理器到处理器,但什么是现代CPU的最可能的结果?

回答

1

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