我在Fortran中编写了一个新代码,并且在使用可分配数组或指针数组之间犹豫不决。我在某处读到可分配数组比指针数组有明显的优势:
1)效率更高,因为它们在内存中总是连续的
2)没有内存泄漏可能
有人可以证实吗?你建议使用哪一个?在这两种备选方案之间的代码执行速度方面有什么结果?
答案 0 :(得分:20)
可分配数组可以产生更高效的代码,因为数组是连续的。特别是如果将数组传递给子例程,则连续可以防止编译器创建临时副本的需要。
对于子例程中的局部变量(没有SAVE属性)(对于Fortran 95及更高版本),可分配的数组在退出子例程时自动解除分配,从而避免内存泄漏。除了可以解除程序员不再释放不再需要的数组之外,allocatable也无法进行内存泄漏。
使用指针,您可以重新分配指针,使某些内存无法访问和丢失 - 这是一种泄漏形式。如果allocatable可以完成这项工作,我建议使用该方法而不是指针。
使用指针的一些原因:获取数组的一部分,或创建数据结构(如链表)。为了创建在运行时确定的大小数组,我将使用可分配的。