[英]Passing an array to a subroutine
當我將數組傳遞給子例程時,它會移動整個數組還是僅指向存儲路徑的指針? 我的問題看起來像:
program run
real,dimension :: p(200,200,200)
integer :: i
do i=0,10000000
call sub_p(p)
enddo
end
subroutine sub_p(rhs)
real,dimension :: rhs(200,200,200)
...
end
因為如果整個數組都通過了,那么關於運行時間可能會花費更長的時間?
@Vladimir:因此,在上面的代碼中傳遞了一個指針,但是如果代碼看起來像下面的代碼,則復制數組嗎?:
program run
real,dimension :: p(200,200,200)
integer,parameter :: imax = 198
integer,parameter :: jmax = 198
integer,parameter :: kmax = 198
integer :: ib,ie,jb,je,kb,ke
integer :: i
ib=1; ie=ib+imax
jb=1; je=jb+jmax
kb=1; ke=kb+kmax
do i=0,10000000
call sub_p(p(ib:ie,jb:je,kb:ke))
enddo
end
subroutine sub_p(rhs)
integer,parameter :: imax = 198
integer,parameter :: jmax = 198
integer,parameter :: kmax = 198
real,dimension :: rhs(imax,jmax,kmax)
...
end
我對嗎?
是的,如果接口是隱式的,或者啞元參數是顯式的形狀數組,則將傳遞一個指針。 (該標准並未明確說明,但實際上,這是唯一可能的實現。
但這可以是副本的指針! 如果數組不連續且接口是隱式的,則將有一個副本!
在您的情況下:
無副本:
call sub_p(p)
需要副本:
call similar_sub(p(1,:,:))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.