当我将一个数组传递给子程序时,它是移位整个数组还是只是一个指向内存路径的指针? 我的问题看起来像:
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
我是对的吗?
答案 0 :(得分:2)
是的,如果接口是隐式的,或者伪参数是一个显式的形状数组,就像你一样,传递一个指针。 (标准没有明确说明,但实际上它是唯一可能的实现。
但它可以是指向副本的指针!如果数组不连续且接口是隐式的,那么将有一个副本!
在你的情况下:
没有副本:
call sub_p(p)
需要的副本:
call similar_sub(p(1,:,:))