我有这个大数据结构,它是双精度列表列表的列表列表。显然,它的处理效率极低。运行我的应用程序大约70%的时间用于在列表末尾的双打中写入零。我需要一个更快的替代产品,它满足两个约束:
1)必须连续分配所有内存(即很大的内存)
2)我必须使用通常的A [] [] [] [] []语法访问该块
到目前为止,我想到了使用* double来容纳整个块,并重用我的...列表列表来存储指向块中适当区域的指针。
还有更好的主意吗?
最佳答案
我很懒于做5D情况的一个例子,说明如何使用2D阵列实现这一点。
double **a;
a = malloc (n * sizeof(*double));
a[0] = malloc (n * m * sizeof(double));
for (int i = 1; i < n; ++i)
a[i] = a[0][i*n];
这样,您可以决定是否要使用a [0] [i * n]或a [i] [j]对其建立索引。内存是连续的,而您只有两个分配。当然,这也需要在内存中有一个空闲的n * m * sizeof(double)块,但是由于您要求连续分配内存,所以我希望这会得到满足。这也意味着您将必须使用以下命令正确删除它:
free(a[0]);
free(a);
因此,我将创建一个create5Darray(n,m,k,l,t)和一个delete5Darray函数以使其更容易。