我有这个大数据结构,它是双打列表列表的列表。显然,处理起来效率极低。大约70%的时间用于运行我的应用程序,用于在列表末尾的双打中写入零。我需要一个更快的替换,它满足两个约束条件:
1)必须连续分配所有内存(即大量内存)
2)我必须使用通常的A [] [] [] [] []语法
来访问这个块至于现在,我想过使用* double来保存整个块并重用我的列表列表来存储指向块中相应区域的指针。
有更好的想法吗?
答案 0 :(得分:0)
如何使用2D数组实现这一点的一个例子,我懒得去做5D的情况,是
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];
通过这种方式,您可以决定是否希望使用[0] [i * n]或[i] [j]对其进行索引。内存是连续的,只有两个分配就可以逃脱。当然,这也需要在内存中有一个免费的n * m * sizeof(双)块,但由于你要求连续分配内存,我希望这是满足的。这也意味着您必须使用以下命令正确删除它:
free(a[0]);
free(a);
所以我会创建一个create5Darray(n,m,k,l,t)和一个delete5Darray函数来使这更容易。