高维数组vs一维数组在c++中的效率



我很好奇使用高维数组与一维数组的效率。当像这样定义和迭代数组时,是否会丢失任何内容:

array[i][j][k];

或者像这样定义并遍历数组:

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

我的倾向是不会有什么区别,但我仍然在学习高效编程(我以前从来没有关心过这类事情)。

谢谢!

唯一确定的方法是对两种方法进行基准测试(当然要在编译器中打开优化标志)。在第二种方法中,你肯定会失去的是阅读的清晰度。

编译后,访问数组的前一种方式和后一种方式是相同的。请记住,访问彼此接近的内存位置确实会在性能上产生差异,因为它们将以不同的方式缓存。因此,如果您正在存储一个高维矩阵,如果您打算以这种方式访问它们,请确保您逐个存储行。

一般来说,CPU缓存优化时间和空间排序。也就是说,如果您访问内存地址X,那么访问X+1的几率更高。在同一缓存行中操作值会更有效率。

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

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

相信你的编译器!

这可能取决于实现,但我认为它或多或少相当于您的一维数组代码

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

即使它很重要,也肯定只有一个内部循环需要注意。

相关内容

  • 没有找到相关文章

最新更新