假设我有一个非常大的数组verybigvariable
我已经定义了一个执行某些操作的函数
function myfunc(var) result(res)
real:: var(:,:,:),res
...
...
...
end function myfunc
我的问题是,当我这样称呼这个函数时
myvar=myfunc(verybigvariable)
会发生什么?它是否复制了我的变量,因此它在执行函数期间在ram中保存了2X空间?如果是这样我怎么能阻止这个? (在一个简单的程序中,我知道,我可以定义没有任何参数的函数,并使其使用现有的变量,但如果我正在编写模块,似乎我必须在定义中包含参数)
答案 0 :(得分:7)
Fortran语言标准未指定参数的传递方式。通常为了提高效率,编译器不会复制,而是传递参数的地址。在某些情况下,Fortran编译器必须进行复制。例如,实际的参数是一个非连续的数组,但该过程需要一个连续的参数。编译器必须通过制作一个连续传递给过程的副本来修复不匹配。如果过程修改了该参数,则必须将值复制回原始参数。
答案 1 :(得分:0)
在fortran中,seems参数通过引用传递。这意味着只传递变量的地址,然后函数可以通过该地址访问变量。
所以不,不复制数组,只传递数组的地址。对于32位系统,其开销为32位,对于64位系统,则为64位。
我对fortran没有经验,这只是我通过谷歌搜索得出的结果,所以如果任何Fortran程序员有任何评论,请随时编辑/评论。