【发布时间】:2017-02-06 22:03:17
【问题描述】:
我了解缓存命中和未命中的概念,但不知何故我并没有真正理解代码示例。下面的代码应该会生成很多 catch Hits,但是为什么呢?我们在哪一部分看到了这一点?我们现在怎么知道这段代码大部分时间会在缓存中找到数据呢?
char array[1000];
for ( int i=0; i<1000; i++ ){
printf("%d ", array[i]);
}
【问题讨论】:
-
如果您了解缓存的工作原理以及何时发生命中和未命中,那应该是显而易见的。如果不是,您应该阅读有关缓存的更多信息,并尝试思考它的作用以及代码的作用。在纸上画一个缓存并播放它。
-
由于您以顺序方式访问元素并且项目是连续的,因此缓存可以发挥最佳作用,因为它旨在做到这一点。
-
创建一个大数组,并访问彼此相距很远的元素。 0 索引然后 10000 然后 20000 然后 30000,... 或随机。
-
可能不会。索引 4 在缓存中,因为您最近访问了索引 2。
-
这在很大程度上取决于您非常具体的缓存实现。缓存可以有不同的缓存线大小和不同的机制来查找缓存线。
标签: c caching hardware memory-access