2010-09-30 76 views
1

我正在編寫一個使用3維數組的Fortran77程序。 我聲明的數組如下Array_E(0:500,0:1000,0:100)。當我執行程序時,它立即崩潰,說它已被「殺死」。 當我跑strace的,我得到的是,fortran77中的動態內存分配

的execve( 「./飴」,[ 「./yee」],[/ * 65個*瓦爾/] +++通過SIGKILL +++

打死

我懷疑問題是g77編譯器不能爲數組分配內存,實際上有9個這樣的數組,在這種情況下,有一種方法可以在f77中動態分配堆棧中的內存嗎? If這不是崩潰的原因,請讓我知道,如果你有任何想法。

+0

爲什麼你在F77中編寫它有些超出我的想法......爲什麼你要求在30年前的語言標準中使用當今語言的特性,甚至更進一步。 – Rook 2010-10-01 01:50:07

+0

,因爲OP還必須知道f77/f90仍然是用於處理數字的最佳大錘。 – 2016-02-04 07:14:47

回答

3

數組大小約爲50x10^6條目,所以大約400MBytes大小的雙精度。增加3.6 GB的內存,所以我假設你有足夠的內存可用於開始?

在Fortran 77中使用大型數組可能會產生問題,因爲它們不是動態分配的,而是放在堆棧上。我不確定是什麼限制,我想這取決於操作系統和體系結構,但在32位系統上,它可能無法使用堆棧中較大的數組。你可以使用Fortran 90的可分配數組,但是你必須使用gfortran而不是g77。

如果你需要堅持嚴格的fortran 77,你可以使用ma包,它可以作爲全局數組工具包(http://www.emsl.pnl.gov/docs/global/)的一部分獲得。

+0

這個GA lib在osx上是一個強硬的buld,它是一個很重的lib,有很多mpi的開銷,但它似乎可以處理巨大的f77矩陣 – 2016-02-04 07:13:33