C 适用于******双卡的更换件

C 适用于******双卡的更换件,c,list,dynamic,allocation,replace,C,List,Dynamic,Allocation,Replace,我有一个大数据结构,它是一个双打列表列表列表。显然,这是非常低效的处理。运行我的应用程序所花费的大约70%的时间用于在列表末尾的双精度中写入零。我需要一个满足两个约束条件的更快的替换: 1) 所有内存必须连续分配(即,一大块内存) 2) 我必须使用通常的A[]]语法访问此块 现在,我想用一个*double来保存整个区块,并重用我的列表。。。存储指向块中适当区域的指针 有更好的主意吗?一个关于如何用2D数组实现这一点的例子,我懒得做5D的例子,是 double **a; a = malloc (n

我有一个大数据结构,它是一个双打列表列表列表。显然,这是非常低效的处理。运行我的应用程序所花费的大约70%的时间用于在列表末尾的双精度中写入零。我需要一个满足两个约束条件的更快的替换:

1) 所有内存必须连续分配(即,一大块内存)

2) 我必须使用通常的A[]]语法访问此块

现在,我想用一个*double来保存整个区块,并重用我的列表。。。存储指向块中适当区域的指针


有更好的主意吗?

一个关于如何用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];

所以我会制作一个create5Darray(n,m,k,l,t)和一个delete5Darray函数来简化这个过程。

我可以问一下为什么需要这么大的内存块吗?稀疏矩阵样式的表示法是一种整洁的替代方法,如果它不适合(以及
A[]]
语法!),为什么必须使用A[]]语法?如果你能放松这个约束,用一个函数调用代替它,比如getValue(a,i,j,k,l,m),那么我相信你可以简化你的问题。要澄清的是,当你说“列表”时,你不是指链表吗?@jeffoster我需要块,因为我的矩阵不是稀疏的。每一个元素在运行期间都会增加一个值computation@Patrick我不是唯一的开发者。我想让其他人继续使用旧的语法请让你的答案C,而不是C++有趣,但我在C中工作,所以“新建”和“删除”是不可能的。对不起,没有看到。编辑了C的答案。
free(a[0]);
free(a);