可分配数组还是指针数组?

13

我正在编写一段Fortran代码,犹豫是否使用可分配数组或指针数组。我在某个地方读到,可分配数组比指针数组具有显着优势:

1)更有效率,因为它们始终在内存中是连续的

2)不可能出现内存泄漏

有人能否确认这一点?你会建议使用哪一个?在这两种选择之间,执行代码的执行速度结果如何?


为什么你不会出现内存泄漏?你难道不需要使用allocatable来创建的数组进行DEALLOCATE吗? - Carl Norum
@Carl - 你的意思是“分配”吗? - Rook
1个回答

21

可分配数组可以使代码更加高效,因为这些数组将是连续的。特别是如果数组被传递给一个子程序,那么连续性可以避免编译器创建临时副本。

对于子例程中的局部变量(没有 SAVE 属性)(对于 Fortran 95 及更高版本),可分配数组在退出子例程时会自动解除分配,从而避免了内存泄漏。使用可分配数组不可能发生内存泄漏,除非程序员没有解除分配不再需要的数组。

使用指针的原因:取数组的一段,或创建像链表这样的数据结构。对于创建大小在运行时确定的数组的目的,我建议使用可分配数组而不是指针。


2
更新:使用Fortran 2008,可以使用可分配变量而不是指针来创建链接列表。请参见ftp://ftp.nag.co.uk/sc22wg5/N1701-N1750/N1729.pdf的第5.3项。 - M. S. B.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接