ALLOCATABLE数组或POINTER数组?

rem*_*mek 12 arrays fortran pointers memory-management dynamic-memory-allocation

我正在Fortran中编写一个新代码,并且在使用可分配数组或指针数组之间犹豫不决.我在某处读到可分配数组比指针数组有明显优势:

1)效率更高,因为它们在内存中总是连续的

2)没有内存泄漏是可能的

有人能证实吗?你建议使用哪一个?在这两种备选方案之间的代码执行速度方面有什么结果?

M. *_* B. 20

可分配的数组可以产生更高效的代码,因为数组将是连续的.特别是如果将数组传递给子例程,则连续可以防止编译器创建临时副本的需要.

对于子例程中的局部变量(没有SAVE属性)(对于Fortran 95及更高版本),可分配的数组在退出子例程时自动解除分配,从而避免内存泄漏.除了可以解除程序员不再释放不再需要的数组之外,allocatable也无法进行内存泄漏.

使用指针,您可以重新分配指针,使一些内存不可访问和丢失 - 一种形式的泄漏.如果allocatable将完成这项工作,我建议使用该方法而不是指针.

使用指针的一些原因:获取数组的一部分,或创建数据结构(如链表).为了创建在运行时确定的大小数组,我将使用可分配的.

  • 更新:使用Fortran 2008,可以使用可分配变量而不是指针创建链接列表.见ftp://ftp.nag.co.uk/sc22wg5/N1701-N1750/N1729.pdf的5.3项 (2认同)