有沒有辦法在Fortran 上創建可變大小的數組?? Allocate()不適用於我,因爲它將數組放在堆上。這可能會導致並行化問題(請參閱我的其他問題: OpenMP: poor performance of heap arrays (stack arrays work fine))。當然,一些聰明的內存管理會解決這個問題,但Fortran中的內存管理聽起來很愚蠢。Fortran中可變大小的數組沒有分配()
從本質上講,我期待在C以下的Fortran語言相同的:
scanf("%d", N);
int myarray[N];
再次重申:我不想
Integer, PARAMETER :: N=100
Integer, Dimension(N) :: myarray
,因爲這將決定在編譯數組的大小時間。我也不想要
Integer, Dimension(:), Allocatable :: myarray
read(*,*) N
Allocate(myarray(1:N))
因爲它將數組放在堆上。
非常感謝。直到我最近遇到上述問題中的問題,我纔對Allocatable陣列感到非常滿意。如果對這個問題有一個否定的答案,我會非常感謝這個來源的鏈接。
編輯:查看對M.S.B的答覆的評論。在Fortran 2008中,只有這樣做纔是可行的,並且它的構造是block
。
謝謝,M.S.B.!與C的int數組[N]相比,它的重要性在於它。 – drlemon
使用Fortran 2008的塊構造,您可以更接近於C,即代碼中間的聲明。參見例如,p。 12 ftp://ftp.nag.co.uk/sc22wg5/N1701-N1750/N1729.pdf。我不知道哪些編譯器支持這個,或者他們是否支持OpenMP。 –
我在我的代碼中有這個構造,但是我注意到,默認情況下,gfortran仍然將數組放在堆上,現在我在緊密循環的中間有malloc。看起來需要選項「-fstack-arrays」。 – DaveP