24小时热门版块排行榜    

查看: 2410  |  回复: 9
当前主题已经存档。
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

jhuiuc

至尊木虫 (正式写手)

[交流] 【求助】Fortran里面Stack Overflow【已完成】

Visual Fortran, 程序里面定义了一个整型数组 JS(N), 所有A-H, O-Z参数和数组定义为Real*8类型. 这个数组在Call语句被用到, Call Sub1(A, B, JS).

当N取352以下时, 程序完全正常, 再大就会出现severe 170 -Stack Overflow 的错误信息(Debug时指向这个JS(N)数组).
severe(170): Program Exception - stack overflow
FOR$IOS_PGM_STKOVF. The Compaq Fortran RTL has detected a stack overflow while executing your program. See your Release Notes for information on how to increase stack size.

1. 如何查这个Release Notes?
2. 如何增加Stack Size?
3. 欢迎其他任何相关评论. 如果需要我补充其它信息, 请指出.

程序大概结构是(本身没有任何语言问题, 就是修改N值的时候会出现Overflow现象):
Program Main
Implicit real*8 (A-H, O-Z)
Parameter (N=300)
Integer JS(N)
Real*8 A1(N, N), B1(N,N),X1(N)
......
......
CALL Sub1(A1,B1,N,X1,LL,JS) (A1,B1是2维数组, X1是1维数组, LL是整型数)
......
......
END

SUBROUTINE Sub1(A1,B1,N,X1,LL,JS)
......
......
Return
End

[ Last edited by wangen994 on 2010-1-18 at 12:05 ]
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

senlia

木虫 (小有名气)

★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
jjdg(金币+1):辛苦了! 2010-02-09 19:36
子程序传递的参数所需空间不是很大时 4楼的方法满好的 不用把数组改为动态定义[这个工作满烦的]
如果特别大 那就治标不治本了 那就还是用动态定义吧
好像用公共变量定义可以解决这个问题吧 只是公共变量不大好管理 要很小心才行

[ Last edited by senlia on 2010-2-9 at 19:31 ]
书到用时方恨少, 天涯何处无芳草.
10楼2010-02-09 19:28:06
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 10 个回答

magic7004

金虫 (职业作家)

★ ★ ★ ★ ★ ★ ★
余泽成(金币+2,VIP+0):辛苦了! 1-16 16:40
jhuiuc(金币+5,VIP+0):我刚刚修改了原帖,可否给出一些具体意见,另外到底什么是Stack和heap? 谢谢 1-15 20:46
一般默认的stack size是足够的,通常stack overflow 都是某些bug或者很恶劣的算法导致的。
建议搂住修改一下代码,减小stack的使用。比如避免递归调用,避免把很大的结构放在stack里等。建议搂住把大的结构或者数组放在heap里,把递归改成循环。

ps:stack的大小通常是通过调整编译器的参数修改的,这个去找编译器的文档吧。
流氓不可怕,可怕的是流氓有文化,有文化又BH的流氓无敌~~!
2楼2010-01-16 16:38:09
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

magic7004

金虫 (职业作家)

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
jhuiuc(金币+10,VIP+0):有可能是在调用子程序Sub1的时候,里面参数都是很大数组, 导致Stack Overflow, 可否解释到底什么是Stack和Heap 1-15 20:51
jhuiuc(金币+5,VIP+0): 1-15 20:52
jhuiuc(金币+10,VIP+0):虽然我写过很多Fortran,但还不知道什么是Heap,能给个例句吗?C语言的也可以 1-16 19:09
貌似楼主有两个N X N维的数组,如果这个是放在stack里的话,那就是非常大的了。
我不清楚FORTRAN的语法,不知道楼主声明数组的方式是不是会把数组放在stack里。
如果是放在stack里的话,建议搂住把数组放到Heap里。

ps:stack就是堆栈,Heap就是堆。每个线程都有自己的stack用来保存局部变量和函数调用信息,根据编译器不同,通常大小1~4MB之间,如果用完了就会出现stack overflow exception。
如果楼主不清楚的话,建议看一下Fortran语法关于内存管理的部分,非常大的数组应该是动态管理的,放在heap里。。

[ Last edited by magic7004 on 2010-1-16 at 16:50 ]
流氓不可怕,可怕的是流氓有文化,有文化又BH的流氓无敌~~!
3楼2010-01-16 16:47:07
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

maomao1210

金虫 (正式写手)

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ...
余泽成(金币+2,VIP+0):辛苦了! 1-16 23:13
jhuiuc(金币+88,VIP+0):可否解释一下增加Stack Size对程序会产生什么影响, 比如运行速度降低? 1-16 10:17
引用回帖:
Originally posted by jhuiuc at 2010-1-16 16:25:
Visual Fortran, 程序里面定义了一个整型数组 JS(N), 所有A-H, O-Z参数和数组定义为Real*8类型. 这个数组在Call语句被用到, Call Sub1(A, B, JS).

当N取352以下时, 程序完全正常, 再大就会出现severe 170 -Sta ...

这样修改:stack size
是我从我们群里截的图。答案是某个大侠给出来的。可以参考一下。

[ Last edited by maomao1210 on 2010-1-16 at 19:41 ]
4楼2010-01-16 16:58:39
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通表情 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[基金申请] 哪位高人中了,把查询到的截图贴出来让我看看,让我长长见识 +6 yuleib84 2026-08-26 7/350 2026-08-31 19:46 by 鱼翔浅底1
[基金申请] 能否申诉? +7 echo8914667 2026-08-30 8/400 2026-08-31 17:00 by yihongxu
[文学芳草园] 梦想 +5 myrtle 2026-08-26 5/250 2026-08-31 14:40 by hahaboy
[基金申请] 29号明天会评吗 +4 笨笨唐 2026-08-28 4/200 2026-08-31 09:30 by huixian257
[基金申请] 国社科又开始会评了,不知道这次命运如何 +6 雨打竹帘 2026-08-30 10/500 2026-08-31 09:29 by huixian257
[基金申请] 基金不中,共勉 +12 eulota 2026-08-26 12/600 2026-08-31 08:42 by ZJTJZ
[基金申请] 为什么到现在没收到通知? +5 tannykie 2026-08-29 5/250 2026-08-30 21:05 by purplejack
[考博] 找导师 +6 yuanjiabao 2026-08-29 7/350 2026-08-30 14:40 by 生科新手
[基金申请] 我就是申请一个面上项目而已,这评审意见是按照杰青的条件评的吧? +6 gouxfjh 2026-08-28 11/550 2026-08-30 07:57 by gouxfjh
[基金申请] 2026年叶企孙基金 +4 bud_bud 2026-08-27 7/350 2026-08-29 07:23 by foolishmani
[基金申请] 为什么资助数各大高校都创新高,自己申请怎么就这么难 +12 Kittylucky 2026-08-27 13/650 2026-08-29 00:04 by superceng
[基金申请] 怎么查啊 +6 huang1991js 2026-08-26 6/300 2026-08-28 08:42 by winsaint
[基金申请] 看板上这么多中的,有点像50人群里49个人都是骗子的那种感觉…… +5 a089 2026-08-26 6/300 2026-08-27 14:05 by jonewore
[基金申请] 我不理解! +15 Edward_pc 2026-08-26 23/1150 2026-08-26 20:34 by zzuzxg
[基金申请] 2026年8月25日国自然放榜前突然收到列入评审专家邮件,有关系吗? +25 木水思豆 2026-08-25 28/1400 2026-08-26 14:53 by draco1987
[基金申请] 国合里面能看到了 +7 一怀馨秋 2026-08-26 7/350 2026-08-26 11:23 by zhaosm1982
[基金申请] 国合可查了 +3 paperzjh 2026-08-26 3/150 2026-08-26 10:41 by LemmonTr
[基金申请] 今天务委会开完了,明天出结果吗 +19 angus9576 2026-08-25 23/1150 2026-08-26 10:03 by zp519
[基金申请] 牛来!米来!面来! +8 beefly 2026-08-26 8/400 2026-08-26 08:37 by xuzhipiao
[基金申请] 在坚冰还盖着北海的时候,我看到了怒放的梅花。 (金币+10) +6 ziyangfang 2026-08-25 9/450 2026-08-25 20:26 by huagongfeihu
信息提示
请填处理意见