c++ 2d数组访问速度根据[a] [b]顺序变化?

标签 c++ arrays multidimensional-array

<分区>

Possible Duplicate:
Why is my program slow when looping over exactly 8192 elements?

我一直在修改一个程序,该程序用于对二维数组的元素进行简单求和。至少在我看来,一个错字导致了一些非常奇怪的结果。

处理数组时,矩阵[SIZE][SIZE]:

for(int row = 0; row < SIZE; ++row)
    for(int col = 0; col < SIZE; ++col)
        sum1 += matrix[row][col];

运行速度非常快,但是上面的行 sum1... 被修改了:

sum2 += matrix[col][row]

就像我曾经在没有意识到的情况下所做的那样,我注意到我的运行时间显着增加。这是为什么?

最佳答案

这是由于您的程序的缓存行为。

数组只是连续的内存块,因此当您访问 [行][列] 时,您是在按顺序访问内存。这意味着您正在访问的数据页面在同一页面上,因此访问速度更快。

当您执行 [column][row] 时,您不再按顺序访问该内存,因此您最终会遇到更多缓存未命中,因此您的程序运行速度会慢得多。

关于c++ 2d数组访问速度根据[a] [b]顺序变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13093155/

相关文章:

java - 无法在java中将大文件(>1gb)转换为字节数组

c - 如何创建带有设置变量的大型二维数组?

c# - 如何在 C# 中使用 struct 和 union

c++ - 可以将非常量字符数组传递给常量字符数组吗?

python - CMake boost 也需要 -lboost_* 才能工作

javascript - IE9 错误 80020102,使用带有 doctype strict 的 vbscript Preserve 关键字

java - 马尔可夫链,基于概率的随机文本。 java

c - 在 C 中处理多维数组的列

javascript - 循环遍历多维数组并构建路径图

c++ - 为什么从函数调用时 c++11 std::normal_distribution 返回相同的模式?