【发布时间】:2016-10-23 07:20:30
【问题描述】:
我最近看到一条评论如下:
多维数组需要大量时间进行数组访问。为了提高它们的缓存和访问速度,建议保持索引从小到大,即声明
rmq数组,如rmq[11][11][1002][1002]而不是rmq[1002][1002][11][11]。
我尝试了一个代码来测试它。在代码 1 中:
int pre_compute[18][100001]; //global variable
int main(){
/*some precomputations on pre_compute array
of the order of size of the array*/
/*Run 10^8 queries on pre_compute array,
O(1) per query.*/
}
代码 2:
int pre_compute[100001][18]; //global variable
int main(){
/*exact same precomputations on pre_compute array as done in Code 1
of the order of size of the array*/
/*Run 10^8 queries on pre_compute array,
O(1) per query.*/
}
除了数组的分布之外,这两个代码都是相同的。两个代码之间仍然存在很大的执行时间差异。第一个代码在我的 PC 上平均占用了 0.40 secs,而另一个代码平均占用了 1.42 secs。
数组的两个实现之间的执行时间差异如此之大的可能原因是什么?
【问题讨论】:
-
@vu1p3n0x 后者几乎是完全的问题,并且描述了实际使用声明的数组的不方便省略的代码中发生的事情。干得好。
-
下次请提供minimal reproducible example,如果您不同意重复回答您的问题,请在此处发布。
-
此外,任何与性能相关的问题都应附有用于构建测试的命令行,更明确地说,用于构建程序的优化。这类问题出现的次数太多,发现发帖人正在测试未优化和/或“调试”的构建,结果毫无意义。
标签: c++ arrays performance multidimensional-array