FORTRAN程序无法将所有数据读入数组,大小限制?

时间:2012-10-24 05:13:58

标签: arrays fortran coredump bus

我有一个csv文件,大约有200万行,大约有150列数据。文件总大小约为1.3 GB。这是大约3亿阵列成员。

我从一个350万行文件开始,通过试验和错误了解到FORTRAN甚至不会编译,除非阵列被定义为390万或更少。 400万,不去。总线错误/核心转储。

所以无论如何,我认为我的200万行文件可行。我读了一些关于2 GB限制的帖子。但是,当我在读取数据时打印出行号时,在它刚结束之前我只会达到250,000左右。奇怪的是,我有一个几乎完全相同的文件(使用split命令),它只能在conking之前达到85,000。不知道为什么每行有这么不同,相同数量的字符。

我可以做些什么来读取这些数据?将所有数据编译数百次将是一个巨大的痛苦。

1 个答案:

答案 0 :(得分:2)

这不是Fortran本身的属性,而是您特定的编译器和操作系统的属性。这就是你应该提供这些信息的原因。

重新发生总线错误:可能是数组被放置在堆栈上并且您的堆栈空间已用完。各种OS提供了增加堆栈大小的方法。许多编译器提供选项,以便将大型数组放入堆中。您也可以尝试声明数组“allocatable”并分配它。最后一个建议假定您使用的是Fortran 95编译器,而不是FORTRAN 77编译器。

还有如何声明用于索引的整数变量。如果程序中的循环超过2,147,483,647,则需要使用大于4个字节的变量。我们只能猜测,因为您没有显示任何源代码。