C++ 比较不连续和连续内存访问的性能

C++ 比较不连续和连续内存访问的性能,c++,performance,memory,paging,C++,Performance,Memory,Paging,假设我们使用malloc()来应用大内存空间,例如16GB。初始化后,将找到相应的物理页。基本上,malloc()将在虚拟内存中分配连续空间,然后映射到连续物理内存,该内存由许多页组成,这些页的大小通常为4KB。让我们把它们索引为:page0,1,2,3……n。我想知道我是按第0,1,2,3…K页的顺序(连续)访问该页,还是按第0,100,200,300,K*100页的顺序(不连续)访问该页 在以上两种情况下,我都访问k个页面,我想第二种情况会慢得多。所以我试着设计一个小测试来证明这一点。结果表

假设我们使用malloc()来应用大内存空间,例如16GB。初始化后,将找到相应的物理页。基本上,malloc()将在虚拟内存中分配连续空间,然后映射到连续物理内存,该内存由许多页组成,这些页的大小通常为4KB。让我们把它们索引为:page0,1,2,3……n。我想知道我是按第0,1,2,3…K页的顺序(连续)访问该页,还是按第0,100,200,300,K*100页的顺序(不连续)访问该页

在以上两种情况下,我都访问k个页面,我想第二种情况会慢得多。所以我试着设计一个小测试来证明这一点。结果表明,只有20%的性能下降。我的测试程序在访问每个页面时按缓存线大小(64KB)读取

我有两个问题: 1.你能告诉我为什么非连续访问速度较慢吗? 2.为什么它只慢了20%,而不是30%、50%或更慢


我在一台有2个8核cpu和64GB内存的机器上运行测试程序。你能从理论上解释一下吗,或者教我如何设计测试程序(我想我的设计有问题)。谢谢

您使用哪种CPU型号?你的代码看起来怎么样?@Leeor英特尔(R)至强(R)CPU E5-2665 0@2.40GHZ这里有很多变量。。。努玛,缓存。。。QPI链接。。。这不是测试这个特定问题的理想情况。如果不看代码,很难判断。涉及到不同级别的缓存。您允许多少缓存?您在每一帧上进行了多少处理?如果您使用随机页面访问模式而不是统一的步骤,该怎么办?@paddy是的,我正在尝试访问随机页面