我需要声明一个具有 83000 行和 83000 列的矩阵。 当我以以下形式声明它时:
double precision,allocatable :: MAT(:,:)
allocate(MAT(83000,83000))
通过 gfortran 从 MinGW 32 位编译代码是成功的,但是当我运行 *.exe 时,我收到以下错误:
integer overflow when calculating the amount of memory to allocate
如果我改变矩阵的维度,即 (nrow=100,ncol=100)
,一切正常,所以代码似乎是正确的。
我的问题是,当矩阵的维度很大时,我该如何声明它?
最佳答案
32 位编译器无法处理如此大的数组。 83000 * 83000 大于最大 32 位整数值 2147483648,因此无法计算数组的大小。您必须使用 64 位编译器。 (即使在默认设置下的某些 64 位编译器中也会发生此溢出 Allocate large array in PGI Fortran 但 gfortran 应该没问题。)
矩阵 (56 GB) 也远远超过了 32 位进程可寻址的最大内存量。
关于arrays - 在 gfortran 中分配大矩阵时整数溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42835285/