我最近注意到,使用循环扫描长数组会降低缓存性能。你能解释一下为什么会发生这种情况以及这个问题的解决方法。我正在使用C / C ++开发一个Linux平台
答案 0 :(得分:5)
这是一个经典的缓存问题:如果循环遍历足够大的数组,则每个内存引用都是一个已经刷新的项,因此需要将该项从RAM中提取到缓存中。在最简单的情况下,您只需访问比缓存大一个字节的数组即可看到这种情况。
即使是复杂的,预测性的提取方案也会遇到这个问题。无论缓存方案是什么,总是可以设计一个提取模式,这将导致每个内存引用上的缓存验证错误。
好消息是现代缓存系统努力减少这种影响。例如,您正在使用的系统可能会在大型数组中进行一些前向提取,因此不会对每个内存访问产生错误。最后,花时间了解缓存系统,也许从您在本科中学习的架构课程中查看笔记:-)将帮助您使用缓存系统。