346082*346082大数组debug时触发断点
integer dimreal(kind=8),allocatable::t(dim,dim),r(dim)
dim=346082
allocate(t(dim,dim),r(dim))
出现断点的地方时allocate中的r(dim),显示undefined pointer/array,但是t(dim,dim)是正常的,会不会我的数组太大了,我使用到蛮多数组,都挺大的,这t和r只是其中的两个,感谢各位大佬!!
你的猜测没错,数组太大了。
346082*346082 这个数组,需要 958GB 的内存。 vvt 发表于 2021-4-16 10:18
你的猜测没错,数组太大了。
346082*346082 这个数组,需要 958GB 的内存。
那有什么办法可以解决吗:'(:'( 本帖最后由 胡文刚 于 2021-4-17 15:27 编辑
根据情况用其他计算方法代替。
嗯,除了内存,你还可以用硬盘存储数据。
我在steam上买了一个《生化危机3重制版》,它有22GB那么大,占了这么大的硬盘空间,但内存里并没有22GB大小的数组。
富士康的工人每天需要处理3000多件装配件,但公司并没有给他们分配能装下3000多个装配件的桌子。你说怎么办呢?
我们国家有(约)14亿人口,每个人都有独一无二的身份证号码。但公安系统的电脑内存里,没有一个14亿大小的数组来记录他们的身份证号码。
此外,在60年代的时候,内存普遍只有64KB到128KB,航天飞机轨道计算的任务仍然被计算机正确的执行了。
allocatable 的数组需要是假定形状的
尝试
real(kind=8),allocatable :: t(:,:), r(:)
!=================
另,有名为 dim 的内置函数,虽然 Fortran 没有保留字,但是还是尽量避免与内置函数同名
可以考虑用 ndim 代替 dim
dfct 发表于 2021-4-17 20:28
allocatable 的数组需要是假定形状的
尝试
real(kind=8),allocatable :: t(:,: ...
已解决,谢谢你! 楼主怎么解决的,我也遇到了类似的问题 胡文刚 发表于 2021-4-17 15:13
根据情况用其他计算方法代替。
嗯,除了内存,你还可以用硬盘存储数据。
使用动态数组随时写入文件、释放内存,有效。搞定了360000×3000×2的大数组。
页:
[1]