我希望使用allocate( fortran95 (Size))在size=10^7中使用动态声明大型数组,而real和内容real*8 numbers.If size<13*10^6一切运行顺利,没有任何错误,但如果是size>13*10^6,那么我在运行时会得到一个分段错误。使用动态声明很重要,因为数组的大小是在程序中计算的。我使用的是64位Mac和gfortran 4.6,谁能帮帮我?
发布于 2011-12-16 23:10:34
10**7的real*8元素是76 MiB,所以应该不会有问题(我已经用GFortran成功地分配了几个GiB数组,虽然我没有使用OSX)。你能发布一个完整的例子来进一步分析你的问题吗?
发布于 2011-12-17 00:44:50
下面是一个使用大小为10**8的数组的例子,它适用于我在Mac和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 -fbacktracehttps://stackoverflow.com/questions/8535619
复制相似问题