高维数组vs一维数组在c++中的效率
Higher dimensional array vs 1-D array efficiency in C++
我很好奇使用高维数组与一维数组的效率。当像这样定义和迭代数组时,是否会丢失任何内容:
array[i][j][k];
或者像这样定义并遍历数组:
array[k + j*jmax + i*imax];
我的倾向是不会有什么区别,但我仍然在学习高效编程(我以前从来没有关心过这类事情)。
谢谢!
唯一确定的方法是对两种方法进行基准测试(当然要在编译器中打开优化标志)。在第二种方法中,你肯定会失去的是阅读的清晰度。
编译后,访问数组的前一种方式和后一种方式是相同的。请记住,访问彼此接近的内存位置确实会在性能上产生差异,因为它们将以不同的方式缓存。因此,如果您正在存储一个高维矩阵,如果您打算以这种方式访问它们,请确保您逐个存储行。
一般来说,CPU缓存优化时间和空间排序。也就是说,如果您访问内存地址X,那么访问X+1的几率更高。在同一缓存行中操作值会更有效率。
查看这篇关于CPU缓存的文章,了解更多关于不同存储策略如何影响性能的信息:http://en.wikipedia.org/wiki/CPU_cache
如果你可以重写索引,那么编译器也可以。我不担心那个。
相信你的编译器!
这可能取决于实现,但我认为它或多或少相当于您的一维数组代码
帮你自己一个忙,在分析代码之后关心一下这些事情。这样的事情不太可能影响整个应用程序的性能。使用正确的算法更重要
即使它很重要,也肯定只有一个内部循环需要注意。
相关文章:
- 为什么当我解模块化时,这个C++代代码"效率较低"?
- 代码的效率. 转到和函数调用
- 对于循环C++可能效率低下
- 内存效率表示最短路径的方法?
- 如何提高该函数的运行效率?
- 效率:标准::数组与标准::矢量
- 如何提高BST的搜索操作效率?
- 字符串引用参数的效率C++
- 提高基于组件的游戏引擎的效率
- 在 c++ 中使用带有映射的插入效率
- 关于效率的问题
- 在SQLITE数据库中写入记录需要花费大量时间.如何提高刀片操作效率?
- 寻求提高Microsoft密封库计算效率的方法
- 做对了一个类似竞争的问题,但需要帮助来提高效率
- C++ - 与 Numpy 中的矢量版本相比,Argsort 效率低的矢量版本实现
- C++,在对象内分配多个数据时,堆栈分配是否更有效? 在下面的程序中,类A_Heap的效率会更低吗?
- visual C++|循环效率
- 我创建了一个库,想知道设计是否效率低下
- 矩阵rowSums()与colSums(()在R与Rcpp与Armadillo中的效率
- 共享指针的复制和交换效率