Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 巨大的数组大小[1M]可能导致堆栈溢出_Arrays_Finite Element Analysis - Fatal编程技术网

Arrays 巨大的数组大小[1M]可能导致堆栈溢出

Arrays 巨大的数组大小[1M]可能导致堆栈溢出,arrays,finite-element-analysis,Arrays,Finite Element Analysis,我正在研究一个用C语言编写的FEM程序,这是为了我的本科学位,它需要非常大的数组,由[1 000 000]个元素组成,用来存储数据,然后对它们进行操作。它还使用2D阵列,这些阵列具有类似的异常巨大的尺寸,例如[100000][100000] 程序终止时不显示任何错误。我们发现,正当程序执行使用大型2D阵列生成网格的例程时,程序崩溃。当您达到如此大的尺寸时,您应该考虑矩阵是否真的有100000 x 100000个元素,或者是否大多数元素为空。如果大多数为零,则应使用。这将减少内存使用 在这之后,您

我正在研究一个用C语言编写的FEM程序,这是为了我的本科学位,它需要非常大的数组,由[1 000 000]个元素组成,用来存储数据,然后对它们进行操作。它还使用2D阵列,这些阵列具有类似的异常巨大的尺寸,例如[100000][100000]


程序终止时不显示任何错误。我们发现,正当程序执行使用大型2D阵列生成网格的例程时,程序崩溃。

当您达到如此大的尺寸时,您应该考虑矩阵是否真的有100000 x 100000个元素,或者是否大多数元素为空。如果大多数为零,则应使用。这将减少内存使用

在这之后,您应该尝试使用矩阵分解来解决您的系统,我相信您应该能够找到您最喜欢的语言的实现


有,所以请尝试看看他们是如何做到的,并充分利用。

如果您在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;

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

为什么需要编译器而不是内存?一个100K x 100K的浮点表需要37GB的ram,除非我的数学算错了。更好的编译器不会使它更好。我认为你的问题更多地与数据结构或算法有关。为什么你认为免费编译器在分配巨大数组方面与专有编译器有什么不同?这里的算法是一个问题,不同的编译器可能有非常不同的向量优化,操作系统可能会介入,因为您可能需要从堆中获取一些内存等。内存大小本身在编译器之间不会有什么区别,我们对其他要求了解不够,无法提出任何建议。Gcc可以工作,但您的计算机可能不工作。可能有趣吗?我在一台拥有128GB内存和英特尔至强八核处理器的计算机上工作。我提到GCC的原因是因为我认为是否定义了任何限制来限制对这些数组的操作。+这正是我怀疑的问题。有限元阵列通常非常稀疏,并且通常可以进行优化,以便合理地进行带状处理。如果不利用这些特性,就无法将玩具研究代码扩展到大型系统。