-1

我正在开发一个用 C 编写的 FEM 程序,我的本科学位需要非常大的数组(由 [1 000 000] 个元素组成的数组)来存储数据,然后对其进行操作。它也使用二维数组,它们具有相似的异常巨大的大小(例如 a[100 000][100 000])。

程序终止而没有显示任何错误。已经发现,当程序将执行生成网格的例程(使用大型二维数组)时,它就会崩溃。

4

2 回答 2

3

当您达到如此大的尺寸时,您应该考虑您的矩阵是否真的有 100 000 x 100 000 个元素,或者它们中的大多数是否为空。如果大多数是零,您应该使用稀疏矩阵。这应该可以减轻内存使用。

之后您应该尝试使用矩阵分解(例如lower upper)来解决您的系统,我相信您应该能够找到您喜欢的语言的实现。

还有其他人对这样的大型系统感兴趣,所以尝试看看他们是如何做到的,并利用近似/迭代求解器

于 2016-10-06T09:14:30.923 回答
2

如果你在 64 位模式下编译,gcc 和 Clang 都不会对这么大的数组有任何问题,只要你在堆上分配它们并记住元素的数量超过了 int 的容量。所以:

#define MATRIXSIZE (100*1000L)
typedef float row_t[MATRIXSIZE];
row_t *matrix = calloc(MATRIXSIZE, sizeof(*matrix));
for (int i = 0; i<MATRIXSIZE; i++)
    matrix[i][i] = 1.0f;

不过,您将需要大量可用内存。

于 2016-10-06T09:28:07.953 回答