在fortran(或任何其他语言)中使用函数的成本

Has*_*san 1 fortran fortran95

假设我有一个非常大的数组 verybigvariable

我已经定义了一个执行这样的操作的函数

function myfunc(var) result(res)
real:: var(:,:,:),res

...
...
...

end function myfunc
Run Code Online (Sandbox Code Playgroud)

我的问题是,当我这样调用这个函数时

myvar=myfunc(verybigvariable)
Run Code Online (Sandbox Code Playgroud)

怎么了?它是否复制了我的变量,因此它在执行函数期间在ram中保存了2X空间?如果是这样我怎么能阻止这个?(在一个简单的程序中,我知道,我可以在没有任何参数的情况下定义函数并使其使用现有变量,但如果我正在编程模块,似乎我必须在定义中包含参数)

M. *_* B. 7

Fortran语言标准未指定参数的传递方式.通常为了提高效率,编译器不会复制,而是传递参数的地址.在某些情况下,Fortran编译器必须进行复制.例如,实际参数是一个非连续的数组,但该过程需要一个连续的参数.编译器必须通过制作一个连续传递给过程的副本来修复不匹配.如果过程修改了该参数,则必须将值复制回原始参数.