我是低级编程的新手,我目前的工作是关于Scala
开发。但我只是用一些东西(可能是非常愚蠢的问题)对自己提出质疑。我无法使用谷歌或常用的分析工具找到答案。
Integer
(或任何其他数据类型4字节大小)可以共享多个L1缓存行吗?我正在使用Haswell
。
据我所知...是的,它可以。请考虑以下代码:
;allocate 100 bytes with mmap
mov [rax + 62], dword -1 ; we misaligned the Integers which now has to share 2 cache lines.
mov ebx, [rax + 62] ; should result in 2 cache hit
由于缓存行是64B
对齐的,我们将int放在64b-aligned-address + 62
位置,因此int的2个字节位于1个缓存行中,另外2个位于另一个缓存行中。
我的理解是否正确?如果没有,请你帮我理解它是如何工作的。我不是在问缓存一致性。我的程序在单个线程中的单个核心上运行。