Fortran Coder

楼主: terrytr
打印 上一主题 下一主题

[求助] 请教大家allocate开不了大数组的原因

[复制链接]

5

帖子

1

主题

0

精华

入门

F 币
34 元
贡献
18 点
跳转到指定楼层
楼主
发表于 2014-6-15 19:50:23 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 terrytr 于 2014-6-19 12:24 编辑

各位下午好。

这两天在使用国外大神发出的代码时,发现一个问题。先说一句,这个程序是公开的,应该不会是代码本身的问题。

这个程序是读取外部txt文件,根据读入参数个数来动态给定数组的大。在以前的使用过程中,由于参数个数不多,程序没有任何问题。

但这两天在读入参数较多时,就出现数组开不了的情况,即,语句allocate(a(),b(),..stat=num),这里的单精度浮点数数组a,b,..有很多,一维,二维的都有。

当数组开得过大时,就出现了后面的num不为0.(为0才是分布了内存)。

比如,卡在abc(14112,14112)这个数组,报错。这个浮点数数组大小在756MB吧。电脑32位win8.1,内存2G,VS2008+IVF-IA32。

不知道说清楚没有,大家给出出主意吧。很急!


==================================
刚刚换平台了。这回是8G内存,但是VS2010和IVF2011都是32位的。也出现上述错误。原因在于要开至少6个756MB的数组。请问大家,除了换64位的VS2010外,还有其他解决办法么?
我实在是想不到了。如果还不信,准备到Linux平台试下。
==================================
最近小弟尝试了两种方式:
(1)由于VS2010没有64位版本,安装了32位的VS2010和可支持32位和64位的IVF编译器。在编译的时候,选择IVF编译器平台为X64。这样,比之前仅仅停留在数据读入后,分配内存时挂掉稍好点。这次是数据读入、分配内存,没问题。但是在后面开数组运算时,还是出现了无法动态分配内存而失败的情况。
(2)在linux平台下,采用gfortran编译器,出现的问题和之前一样,在数据读入后,分配内存即出错。
上述两种情况都是电脑内存只用了2G 左右(任务管理器显示),但是有几次运行时,电脑报出了黄色感叹号--内存不足。不知道为什么。此为问题1.
问题2:在linux平台下,用C++语言时,可以开数组直到内存耗空,但是Fortran为什么开不了?小弟诚心请教大家。谢谢了!
分享到:  微信微信
收藏收藏1 点赞点赞 点踩点踩

5

帖子

1

主题

0

精华

入门

F 币
34 元
贡献
18 点
沙发
 楼主| 发表于 2014-6-16 09:37:23 | 显示全部楼层
安靖 发表于 2014-6-15 20:06
试试增加编译选项  -heap-arrays

heap-arrays是为了把内存申请从栈上移到堆上

昨晚上试过了,很遗憾,还是上面说的结果。谢谢了。

5

帖子

1

主题

0

精华

入门

F 币
34 元
贡献
18 点
板凳
 楼主| 发表于 2014-6-19 12:24:51 | 显示全部楼层
珊瑚虫 发表于 2014-6-17 19:45
使用64位平台编译

仍然不行。请帮忙看下问题更新。谢谢。

5

帖子

1

主题

0

精华

入门

F 币
34 元
贡献
18 点
地板
 楼主| 发表于 2014-6-19 12:25:13 | 显示全部楼层
山大克鲁士 发表于 2014-6-17 09:51
要么用64-bit,要么在32-bit下用多进程.
32-bit单进程啥都不改的情况下,real(8), allocatable :: a, alloc ...

仍然不行。请帮忙看下问题更新。谢谢。

5

帖子

1

主题

0

精华

入门

F 币
34 元
贡献
18 点
5#
 楼主| 发表于 2014-6-20 10:37:53 | 显示全部楼层
fcode 发表于 2014-6-19 14:47
1. 电脑出现内存不足,那说明就真的快空了。所以你的 Fortran 程序实际还是用得差不多了的。
2. 我不明白你 ...

针对第2点:电脑提示了内存不足,这和第1点是一样的;
第3点中,VS2010是没有64位版本的。IVF有的,至少可以在编译时,选择64平台(plantform)进行编译。我是在64位的操作系统下,选用IVF的64位平台编译运行的。好像这是唯一的办法。windows平台下。也可能是我孤陋寡闻吧。如果大家知道,请告知;
第4点,我的虚拟内存开到了4G,而且实在不清楚,编译器是怎么利用虚拟内存的;
第5点,我也觉得是这样的;
第6点,有可能是编译器不一样的问题。
不管怎样,谢谢你的回复!
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-5-3 05:47

Powered by Tencent X3.4

© 2013-2024 Tencent

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