12

我正在Fortran中編寫一個新代碼,並在使用可分配數組或指針數組之間猶豫不決。我讀的地方,分配數組超過指針數組有顯著的優勢:ALLOCATABLE數組或POINTER數組?

1)更有效,因爲他們總是在內存

2)沒有內存泄漏可能連續

有人可以證實這一點?你會建議使用哪一個?這兩種方法之間的代碼執行速度有什麼結果?

+0

爲什麼你不能泄漏內存?你不需要''DEALLOCATE'你用'allocatable'創建的任何數組嗎? – 2010-02-19 23:07:07

+0

@Carl - 你的意思是「分配」... – Rook 2010-02-19 23:46:19

回答

20

Allocatable數組可以產生更高效的代碼,因爲數組將是連續的。特別是如果數組傳遞給子例程,則連續可以防止編譯器創建臨時副本。

對於子程序中的局部變量(沒有SAVE屬性)(對於Fortran 95和更高版本),可分配數組在退出子例程時會自動解除分配,從而避免內存泄漏。對於allocatables,內存泄漏是不可能的,除非程序員沒有釋放不再需要的數組。

使用指針,您可以重新分配一個指針,使某些內存不可訪問並丟失 - 一種形式的泄漏。如果一個可分配的可以完成這項工作,我推薦使用該方法而不是一個指針。

使用指針的一些原因:獲取數組的一部分或創建數據結構(如鏈表)。爲了創建一個在運行時確定的大小數組,我會使用一個可分配的。

+0

非常感謝你對此非常清楚的解釋! – remek 2010-02-20 00:02:44

+2

更新:使用Fortran 2008,可以使用可分配變量而不是指針創建鏈接列表。見ftp://ftp.nag.co.uk/sc22wg5/N1701-N1750/N1729.pdf項目5.3 – 2013-02-06 17:01:20