我希望在fortran95中使用动态声明,使用allocate(矩阵(大小)),而size = 10 ^ 7,内容是真实的* 8个数字。如果大小<13 * 10 ^ 6,一切都运行顺利任何错误,但如果大小> 13 * 10 ^ 6然后我在运行中得到分段错误。因为数组的大小是在程序中计算的,所以我使用动态声明很重要。我使用Mac OSX 64bit和gfortran 4.6。有人可以帮我吗?
答案 0 :(得分:4)
10 ** 7个真实* 8的元素是76 MiB,所以应该没有问题(我已经成功地用GFortran分配了几个GiB数组,尽管我不使用OSX)。您是否可以发布一个独立的示例以进一步分析您的问题?
答案 1 :(得分:2)
以下是使用大小为10 ** 8的数组的示例。它适用于Mac OS X和gfortran 4.6。它可以在您的计算机上运行吗?
program test_lrg
integer, parameter :: DoubleReal_K = selected_real_kind (14)
integer, parameter :: QuadReal_K = selected_real_kind (32)
integer, parameter :: RegularInt_K = selected_int_kind (8)
integer, parameter :: VeryLongInt_K = selected_int_kind (18)
real (DoubleReal_K), dimension (:), allocatable :: array
integer (RegularInt_K) :: i
integer (RegularInt_K), parameter :: N = 100000000_RegularInt_K
real (QuadReal_K) :: sum
integer (VeryLongInt_K) :: CalcSum
allocate (array (N))
do i=1, N
array (i) = i
end do
do i=1, N
sum = sum + array (i)
end do
write (*, *) sum
CalcSum = N
CalcSum = ( CalcSum * (CalcSum + 1_VeryLongInt_K) ) / 2_VeryLongInt_K
write (*, *) CalcSum
stop
end program test_lrg
尝试使用调试选项进行编译,例如:
-fimplicit-none -Wall -Wline-truncation -Wcharacter-truncation -Wsurprising -Waliasing -Wimplicit-interface -Wunused-parameter -fwhole-file -fcheck=bounds -fcheck=do -fcheck=mem -fcheck=recursion -std=f2008 -pedantic -fbacktrace