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