2012-06-15 42 views
2

可能重复:
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]; 
     } 
    } 
} 
+1

可能重复:http://stackoverflow.com/q/4716125/1328439 –

+0

不是一个确切的重复,但接受的答案是优秀的,回答这个问题 – stefaanv

+0

呀,这个问题的答案回答也是我的漂亮多了。所以基本上它的速度更快,因为数组最后一个维度中的元素在内存中一个接一个地存储起来,所以如果你遍历最后一个维度,那么这些元素就会彼此相邻,而不是象我的最后一个一样跳过内存例?此外,每种语言和每个平台都是如此吗? – cody

回答

2

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