【发布时间】:2012-04-15 11:28:30
【问题描述】:
我用 Compaq Visual Fortran 编写了一个程序。该程序没问题,并且在许多情况下都可以正常运行。我现在正在处理的案例更大,输入数据文件更大,当我运行程序时出现以下错误:
forrtl:severe(170): 程序异常 - 堆栈溢出
我安装了editbin.exe 程序,但我真的不知道如何使用它。输入时
editbin /STACK:4000000 DFDEV.exe
它告诉我它无法打开DFDEV.exe,即使我在包含该程序的目录中 (C:\Program Files\Microsoft Visual Studio\Common\MSDEV98\BIN)。
我真的不知道如何解决这个问题,在我在互联网上找到的关于这个主题的每个主题中,都没有关于如何使用这个 editbin 程序的说明。
【问题讨论】:
-
如果您的问题是您的数据太大而无法放入堆栈,您可以考虑改为在堆上分配。
-
+1 @DavidHeffernan 的评论;特别是对于不使用动态分配的较旧的 fortran 程序,堆栈溢出几乎总是意味着子例程或函数中的大型静态数组变得太大而无法放入堆栈。根据您的操作系统,有一些变通方法,或者您可以说服您的编译器在堆上分配大型数组,但最重要的是开始努力完全不拥有如此大的静态数组,而是根据需要分配它们。跨度>
-
如果数据非常大,您可以尝试使用 -share 之类的标志将其分配到堆中。我不知道正确的标志是否至少在 intel 编译器中是 -share 这个标志是 -share-intel
-
在 Fortran 中,我相信这被称为“动态分配”。但是我对Fortran一无所知,所以我不知道语法。
-
Fortran 语言标准没有栈和堆的概念。一些编译器有一个编译时选项来控制数组是否放在堆栈上。可分配数组很可能放在堆上而不是栈上。