Proteus 发表于 2021-4-16 09:54:49

346082*346082大数组debug时触发断点

integer dim
real(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只是其中的两个,感谢各位大佬!!

vvt 发表于 2021-4-16 10:18:53

你的猜测没错,数组太大了。
346082*346082 这个数组,需要 958GB 的内存。

Proteus 发表于 2021-4-17 11:17:17

vvt 发表于 2021-4-16 10:18
你的猜测没错,数组太大了。
346082*346082 这个数组,需要 958GB 的内存。

那有什么办法可以解决吗:'(:'(

胡文刚 发表于 2021-4-17 15:13:25

本帖最后由 胡文刚 于 2021-4-17 15:27 编辑

根据情况用其他计算方法代替。
嗯,除了内存,你还可以用硬盘存储数据。

我在steam上买了一个《生化危机3重制版》,它有22GB那么大,占了这么大的硬盘空间,但内存里并没有22GB大小的数组。

富士康的工人每天需要处理3000多件装配件,但公司并没有给他们分配能装下3000多个装配件的桌子。你说怎么办呢?

我们国家有(约)14亿人口,每个人都有独一无二的身份证号码。但公安系统的电脑内存里,没有一个14亿大小的数组来记录他们的身份证号码。

此外,在60年代的时候,内存普遍只有64KB到128KB,航天飞机轨道计算的任务仍然被计算机正确的执行了。


dfct 发表于 2021-4-17 20:28:57

allocatable 的数组需要是假定形状的
尝试
real(kind=8),allocatable :: t(:,:), r(:)
!=================
另,有名为 dim 的内置函数,虽然 Fortran 没有保留字,但是还是尽量避免与内置函数同名
可以考虑用 ndim 代替 dim

Proteus 发表于 2021-4-23 15:57:07

dfct 发表于 2021-4-17 20:28
allocatable 的数组需要是假定形状的
尝试
real(kind=8),allocatable :: t(:,: ...

已解决,谢谢你!

SSDQBD 发表于 2021-12-12 20:09:13

楼主怎么解决的,我也遇到了类似的问题

navoski 发表于 2022-1-19 22:24:10

胡文刚 发表于 2021-4-17 15:13
根据情况用其他计算方法代替。
嗯,除了内存,你还可以用硬盘存储数据。



使用动态数组随时写入文件、释放内存,有效。搞定了360000×3000×2的大数组。
页: [1]
查看完整版本: 346082*346082大数组debug时触发断点