1

我最近注意到,使用循环扫描长数组会使缓存的性能下降。你们能否解释一下为什么会发生这种情况以及这个问题的一些解决方法。我正在使用 C/C++ 的 linux 平台上工作

4

1 回答 1

5

这是一个典型的缓存问题:如果循环足够大的数组,每个内存引用都指向一个已经被刷新的项目,因此需要从 RAM 中获取该项目以进行缓存。在最简单的情况下,您只需要访问比缓存大一个字节的数组即可看到这种情况发生。

即使是复杂的、预测性的获取方案也会受到这个问题的影响。无论采用何种缓存方案,始终可以设计一种获取模式,该模式将导致每个内存引用出现缓存验证错误。

好消息是现代缓存系统努力减少这种影响。例如,您使用的系统可能会在您的大型数组中进行一些前向提取,因此它不会在每次内存访问时出错。最后,花时间了解缓存系统,也许复习一下你在本科时上过的架构课上的笔记:-) 将帮助你使用缓存系统。

于 2011-11-04T03:52:45.730 回答