Fortran Coder

查看: 19956|回复: 7

[求助] 346082*346082大数组debug时触发断点

[复制链接]

28

帖子

10

主题

0

精华

熟手

F 币
140 元
贡献
81 点
发表于 2021-4-16 09:54:49 | 显示全部楼层 |阅读模式
[Fortran] 纯文本查看 复制代码
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只是其中的两个,感谢各位大佬!!

2.png
1.png

953

帖子

0

主题

0

精华

大师

F 币
180 元
贡献
73 点

规矩勋章元老勋章新人勋章水王勋章热心勋章

QQ
发表于 2021-4-16 10:18:53 | 显示全部楼层
你的猜测没错,数组太大了。
346082*346082 这个数组,需要 958GB 的内存。

28

帖子

10

主题

0

精华

熟手

F 币
140 元
贡献
81 点
 楼主| 发表于 2021-4-17 11:17:17 | 显示全部楼层
vvt 发表于 2021-4-16 10:18
你的猜测没错,数组太大了。
346082*346082 这个数组,需要 958GB 的内存。

那有什么办法可以解决吗

93

帖子

0

主题

0

精华

大师

F 币
641 元
贡献
283 点

规矩勋章元老勋章新人勋章

发表于 2021-4-17 15:13:25 | 显示全部楼层
本帖最后由 胡文刚 于 2021-4-17 15:27 编辑

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

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

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

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

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


天之道,损有余而补不足

5

帖子

0

主题

0

精华

入门

F 币
44 元
贡献
21 点
发表于 2021-4-17 20:28:57 | 显示全部楼层
allocatable 的数组需要是假定形状的
尝试
[Fortran] 纯文本查看 复制代码
real(kind=8),allocatable :: t(:,:), r(:)

!=================
另,有名为 dim 的内置函数,虽然 Fortran 没有保留字,但是还是尽量避免与内置函数同名
可以考虑用 ndim 代替 dim

28

帖子

10

主题

0

精华

熟手

F 币
140 元
贡献
81 点
 楼主| 发表于 2021-4-23 15:57:07 | 显示全部楼层
dfct 发表于 2021-4-17 20:28
allocatable 的数组需要是假定形状的
尝试
[mw_shl_code=fortran,false]real(kind=8),allocatable :: t(:,: ...

已解决,谢谢你!

1

帖子

0

主题

0

精华

新人

F 币
14 元
贡献
5 点
发表于 2021-12-12 20:09:13 | 显示全部楼层
楼主怎么解决的,我也遇到了类似的问题

13

帖子

4

主题

0

精华

入门

F 币
88 元
贡献
52 点
发表于 2022-1-19 22:24:10 | 显示全部楼层
胡文刚 发表于 2021-4-17 15:13
根据情况用其他计算方法代替。
嗯,除了内存,你还可以用硬盘存储数据。

使用动态数组随时写入文件、释放内存,有效。搞定了360000×3000×2的大数组。
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-3-28 17:28

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表