c++ - 多维数组迭代效率

标签 c++ arrays

Possible Duplicate:
Accessing elements of a matrix row-wise versus column-wise

在 C++ 中,为什么像这样迭代多维数组会更有效:

// Iterate through the highest dimention last (k)
int num[10][10][10];

for(int i = 0; i < 10; ++i)
{
    for(int j = 0; j < 10; ++j)
    {
        for(int k = 0; k < 10; ++k)
        {
            cout << num[i][j][k];
        }
    }
}

比这样:

// iterate through the highest dimension first (k)
int num[10][10][10];

for(int k = 0; k < 10; ++k)
{
    for(int j = 0; j < 10; ++j)
    {
        for(int i = 0; i < 10; ++i)
        {
            cout << num[i][j][k];
        }
    }
}

最佳答案

这是因为处理器缓存了数据,以及像 int array[n][m][k] 这样的数组在内存中表示,因此,首先有元素 array[0][0][0]array[0][0][k - 1]等等。因此,如果您像第一个示例中那样进行迭代,处理器可以将整 block 内存加载到缓存中,但在第二个示例中,处理器无法“通过”内存进行复制。

关于c++ - 多维数组迭代效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11051765/

相关文章:

c++ - 具有模板化基类 : Base<Derived> 的菱形继承(钻石问题)

带数组的 Javascript 模块模式

java - 在我的例子中是集合还是数组?

c - 二维数组中的元素丢失了吗?

python - 将图像添加到数组中,该数组返回Python中图像的数量和图像的尺寸

arrays - 声明一个常量数组

c++ - 在 C++ 中创建自定义类的 native 数组

C++ std::stringstream 似乎导致线程在 SunOS 下挂起或死亡

C++ 为 free() 中的缓冲区错误分配内存

c++ - 无法通过可变参数函数将函数指针传递给父类中的方法——编译器错误?