2013-03-24 70 views
1

讓說我有一個數組,這是非常大的verybigvariable成本用FORTRAN函數(或任何其他語言)的

而且我已經定義了都這樣做

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

... 
... 
... 

end function myfunc 

一些操作的功能我問題是,當我打電話這樣的功能,像這樣

myvar=myfunc(verybigvariable) 

會發生什麼?它是否重複我的變量,以便在執行該函數期間在RAM中保存2X空間?如果是這樣,我該如何防止呢? (在一個簡單的程序中,我知道,我可以在沒有任何參數的情況下定義該函數,並且使用現有的變量,但是如果我正在編程一個模塊,似乎我必須在參數中包含該參數)

+1

我只能說C,但在C中,參數總是被複制。你可以通過使用指針來解決這個問題,指針對每個系統都有一個固定的,小的尺寸。另外,在C中,默認情況下,數組作爲指針傳遞,但是我再也不會爲fortran說話了。 – antonijn 2013-03-24 14:46:11

+0

Thx,在任何語言或大多數語言中可能都是一樣的。我會學習指針。 – Hasan 2013-03-24 14:47:16

+0

哦,陣列的「自動指針」功能非常好。我希望Fortran也有。 – Hasan 2013-03-24 14:48:41

回答

7

Fortran語言標準沒有指定參數如何傳遞。通常爲了提高效率,編譯器不會複製,而是傳遞參數的地址。有些情況下Fortran編譯器必須複製。例如,實際的參數是非連續的數組,但是該過程需要連續的參數。編譯器必須通過創建一個連續傳遞給過程的副本來解決不匹配問題。如果該過程修改了該參數,則必須將這些值複製回原始參數。

0

在Fortran中seems參數通過引用傳遞。這意味着只有變量的地址被傳遞,然後函數可以通過該地址訪問變量。

所以不,數組不被複制,只傳遞數組地址。這對於32位系統來說可能是32位,對於64位系統來說可能是64位。

我沒有fortran的使用經驗,這只是我通過谷歌搜索所能找到的,所以如果任何Fortran程序員有任何評論,請隨時編輯/評論。

相關問題