假设我们使用malloc()申请大容量内存空间,例如16GB。初始化后,将找到相应的物理页面。基本上,malloc()会在虚拟内存中分配连续的空间,然后映射到连续的物理内存,该内存由大量传统上为4KB的页面组成。让它们索引为:page0,1,2,3 ...... n。我想知道如果我按页面0,1,2,3 ... K(连续)的顺序访问页面,或者按page0,100,200,300,k * 100(不连续)的顺序访问页面。
在上述两种情况下,我都访问了k页,我猜第二种情况会慢得多。所以我尝试设计一个小测试来证明这一点。结果表明只有20%的性能下降。访问每个页面时,我的测试程序按缓存行大小(64KB)读取。
我有两个问题: 你能告诉我为什么不连续的访问速度会变慢吗? 2.为什么它只减慢20%,而不是30%,50%或更慢?
我在一台带有2个8核cpu和64GB内存的机器上运行测试程序。你能从理论上解释它还是教我如何设计测试程序(我猜我的设计有问题)。感谢