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

时间:2013-03-24 14:44:34

标签: fortran fortran95

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

我已经定义了一个执行某些操作的函数

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

...
...
...

end function myfunc

我的问题是,当我这样称呼这个函数时

myvar=myfunc(verybigvariable)

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

2 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:0)

在fortran中,seems参数通过引用传递。这意味着只传递变量的地址,然后函数可以通过该地址访问变量。

所以不,不复制数组,只传递数组的地址。对于32位系统,其开销为32位,对于64位系统,则为64位。

我对fortran没有经验,这只是我通过谷歌搜索得出的结果,所以如果任何Fortran程序员有任何评论,请随时编辑/评论。