arrays - 在 gfortran 中分配大矩阵时整数溢出

标签 arrays windows matrix fortran gfortran

我需要声明一个具有 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/

相关文章:

matrix - 将正/负元素向量转换为 Julia 中的所有正元素?

matrix - float4 乘以 _World2Object 不是一个 4by4 矩阵吗?

python - 在 Python 中求解 ODE 时,如何获得比 linspace 更多的变量值? (编辑)

arrays - 跨行求和并计算小于 0 的行数

java - 将应用程序作为后台进程运行

node.js - 从 Windows PowerShell 运行 node.js 脚本时,参数转义未正确解释

algorithm - 找到变换矩阵的最少操作次数

c# - 如何保留列表的最新 X 元素

arrays - OpenGL点数组

c - 在 Windows 中,如何创建子进程并捕获其标准输入、标准输出和标准错误,而不复制任何可继承的句柄?