数组或矩阵的性能

Ted*_*seo 1 c

我今天和朋友说话了......他告诉我一些我不知道是不是真的,所以我决定在这里问一下.

他有这个巨大的矩阵,他有这样的项目:

 1 2 3 4 .. 1000
1001 ...... 2000
2001 ...... 3000
....
Run Code Online (Sandbox Code Playgroud)

无论如何..他说在C中遍历它更有效率1 2 3 4 ..因为在C中,数组被逐行存储在内存中.他在代码中对此进行了一次测试,以逐列和逐行遍历这个巨大的结构之一,时间也不同.一个比另一个更有效率.

但我在想这怎么会有所作为......

我的意思是在连续的内存数组中访问*(i + 1)和*(i + 1000)需要相同的时间.对?

摊晒

jas*_*son 8

的参考地点(特别是空间位置)是正确的.将预取/缓存附近的地址以加快访问速度.因此,如果你点击了内存地址p,那么p + 1将预取和缓存内存地址和其他附近的地址以加快对它们的访问,而访问p + 1000可能需要在内存总线上再次进行访问.

(顺便说一句,您描述的布局是行主要顺序.某些语言(例如Fortran)使用列主要顺序.)