2

假设我有一个int包含 10 个元素的数组。使用 64 字节的缓存线,它可以容纳 16 个数组元素,从arr[0]arr[15]

例如,我想知道当您arr[5]从 L1 高速缓存中读取到寄存器时会发生什么。这个操作是如何进行的?cpu 可以选择一个缓存线的偏移量并读取下一个n字节吗?

4

1 回答 1

3

缓存通常会提供完整的行(在这种情况下为 64B),并且 MMU 中的单独组件会根据请求的偏移量和大小旋转并剪切结果(通常是一些桶形移位器)。在此过程中,您通常还会得到一些错误检查(如果缓存支持 ECC 机制)。

请注意,缓存通常组织在存储区中,因此读取可能必须从多个位置获取字节。通过提供一个完整的行,缓存可以先以正确的顺序构造字节(并执行检查),然后让 MMU 选择相关部分。

一些专注于节能的设计可能会决定实现较低的粒度,但这通常只会增加复杂性,因为您可能必须处理更多线段被分割的情况。

于 2015-11-09T21:21:35.490 回答