Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 长数组缓存问题_C++_C_Performance_Memo - Fatal编程技术网

C++ 长数组缓存问题

C++ 长数组缓存问题,c++,c,performance,memo,C++,C,Performance,Memo,我最近注意到,使用循环扫描长数组会降低缓存的性能。你们能解释一下为什么会发生这种情况,以及解决这个问题的方法吗。我在linux平台上使用C/C++这是一个典型的缓存问题:如果在一个足够大的数组上循环,每个内存引用都指向一个已经刷新的项,因此需要将该项从RAM提取到缓存。在最简单的场景中,您只需要访问比缓存大一个字节的数组就可以看到这种情况 即使是复杂的预测性抓取方案也会遇到这个问题。无论采用何种缓存方案,都可以设计一种抓取模式,从而在每个内存引用上导致缓存验证错误 好消息是,现代缓存系统努力减少

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

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

即使是复杂的预测性抓取方案也会遇到这个问题。无论采用何种缓存方案,都可以设计一种抓取模式,从而在每个内存引用上导致缓存验证错误


好消息是,现代缓存系统努力减少这种影响。例如,您正在使用的系统可能会在您的大型阵列中执行一些前向抓取,因此它不会在每次内存访问时出错。最后,花点时间去理解缓存系统,也许复习一下你在大学期间睡过的建筑课程中的笔记:-)将有助于你使用缓存系统

这是一个典型的缓存问题:如果在一个足够大的数组上循环,则每个内存引用都指向一个已经刷新的项,因此需要将该项从RAM中提取到缓存中。在最简单的场景中,您只需要访问比缓存大一个字节的数组就可以看到这种情况

即使是复杂的预测性抓取方案也会遇到这个问题。无论采用何种缓存方案,都可以设计一种抓取模式,从而在每个内存引用上导致缓存验证错误

好消息是,现代缓存系统努力减少这种影响。例如,您正在使用的系统可能会在您的大型阵列中执行一些前向抓取,因此它不会在每次内存访问时出错。最后,花点时间去理解缓存系统,也许复习一下你在大学期间睡过的建筑课程中的笔记:-)将有助于你使用缓存系统

这可能会给你更多的洞察力,因为问题是众所周知的这可能会给你更多的洞察力,因为问题是众所周知的