0

我了解缓存命中和未命中的概念,但不知何故我并没有真正理解代码示例。下面的代码应该会生成很多 catch Hits,但是为什么呢?我们在哪一部分看到了这一点?我们现在怎么知道这段代码大部分时间会在缓存中找到数据呢?

char array[1000]; 
for ( int i=0; i<1000; i++ ){ 
printf("%d ", array[i]); 
}
4

1 回答 1

1

给定的代码是参考空间局部性的完美示例,因为array[i]它是以连续和前向的方式访问的。根据维基百科

空间局部性

如果在特定时间引用了特定存储位置,则很可能在不久的将来会引用附近的内存位置。在这种情况下,通常会尝试猜测当前参考周围区域的大小和形状,值得为其准备更快的访问。

您可能还注意到i变量表现出时间局部性,在这种情况下,它很可能会通过优化编译器放入 CPU 寄存器中。

于 2017-02-06T13:45:37.593 回答