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;

创建第二个版本的速度更快,但是访问第一个版本的速度更快(例如使用卷积的图像处理),不是吗?还是可以忽略不计?

最佳答案

从理论上讲,第二个版本应该更快,因为整个数组是连续分配的,因此它比第一个版本对缓存更友好。

但是在实践中,对其进行了分析,看看会发生什么。 这种性能问题在很大程度上取决于您的体系结构,操作系统等。

在这里,我的建议(除了概要分析之外)是:考虑使用经过了分析,测试的标准容器(在这种情况下为std::vector<std::vector<T>>),还可以使您的工作变得更轻松,使您远离原始指针和手动内存管理。

关于c++ - 二维数组在堆上,哪个版本更快?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20598062/

10-11 11:42