高维数组与C ++中的1-D数组效率

时间:2011-04-11 19:42:23

标签: c++ processing-efficiency memory-efficient

我很好奇使用更高维数组与一维数组的效率。在定义和迭代这样的数组时,你会丢失任何东西:

array[i][j][k];

或者像这样定义和迭代数组:

array[k + j*jmax + i*imax];

我倾向于没有区别,但我仍然在学习高效编程(我以前从未关心过这类事情)。

谢谢!

5 个答案:

答案 0 :(得分:1)

唯一可以确定的方法是对两种方式进行基准测试(当然,在编译器中使用优化标志)。一个人认为你在第二种方法中肯定会失去阅读的清晰度。

答案 1 :(得分:1)

一旦编译它,前一种方式和后一种访问数组的方式是相同的。请记住,访问彼此靠近的内存位置确实会对性能产生影响,因为它们的缓存方式会有所不同。因此,如果您要存储高维矩阵,请确保一个接一个地存储行,如果您要以这种方式访问​​它们。

通常,CPU缓存针对时间和空间排序进行优化。也就是说,如果访问内存地址X,则访问X + 1的几率会更高。对同一缓存行中的值进行操作会更有效率。

查看有关CPU缓存的这篇文章,了解有关不同存储策略如何影响性能的更多信息:http://en.wikipedia.org/wiki/CPU_cache

答案 2 :(得分:1)

如果可以重写索引,编译器也可以。我不担心。

相信你的编译器(tm)!

答案 3 :(得分:0)

这可能取决于实现,但我会说它或多或少等于你的一维数组代码。

答案 4 :(得分:0)

分析代码之后,帮自己一个忙,关心这些事情。这样的事情不太可能影响整个应用程序的性能。使用正确的算法更为重要

即使它确实很重要,但肯定只有一个需要注意的内循环。