大家好
我是 C 编程的新手,我对如何在 C 中处理非常大的矩阵知之甚少。例如矩阵大小为 30.000 x 30.000。
我的第一个方法是动态存储内存:
int main()
{ int **mat;
int j;
mat = (int **)malloc(R*sizeof(int*));
for(j=0;j<R;j++)
mat[j]=(int*)malloc(P*sizeof(int));
}
处理 8.000 x 8.000 的 +/- 矩阵是个好主意。但是,不是更大。所以,我想请求任何光来处理这种巨大的矩阵。
正如我之前所说:我是 C 的新手,所以请不要期望太多经验。
提前感谢您的任何建议,
大卫亚历杭德罗。
PD:我的笔记本电脑配置是 linux ubuntu、64 位、i7 和 4gb 内存。
最佳答案
对于这么大的矩阵,我会尽量避免所有这些对 malloc
的调用。这将减少设置数据结构的时间并消除动态内存的内存开销(malloc
存储有关 block 大小的附加信息)
只需使用一次malloc
- 即:
#include <stdlib.h>
int *matrix = malloc(R * P * sizeof(int));
然后计算索引为
index = column + row * P;
也可以按顺序访问内存,即先按列访问。更好的缓存性能。
关于c - C编程中非常大的矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10874258/