【发布时间】:2014-01-03 02:02:04
【问题描述】:
double **array = new double* [X];
for (int i=0; i<X; i++)
array[i] = new double [Y];
array[x][y] = n;
或
double *array = new double [X*Y];
array[x*Y+y] = n;
第二个版本的创建速度更快,但第一个版本的访问速度更快(例如使用卷积的图像处理),不是吗?还是这一切都可以忽略不计?
【问题讨论】:
-
使用代表性数据运行它们,对它们进行计时并查看。您无法通过读取代码来可靠地预测性能,有太多因素在起作用,例如编译器、编译器的配置方式、缓存效果等。
-
*(array+(x*Y+y))或*(*(array+x)+y)不可预测? 2 次求和 + 1 次乘法 + 1 次解引用与 2 次递减 + 2 次求和... -
不,不是!你问它是否可以忽略不计 - 如果我不同意在不运行代码的情况下计算相对性能,那么我不能更不同意尝试量化这种差异。
标签: c++ arrays indexing heap-memory