ALLOCATABLE 数组还是 POINTER 数组?

发布于 2024-08-22 15:05:18 字数 171 浏览 7 评论 0原文

我正在用 Fortran 编写新代码,并在使用可分配数组还是指针数组之间犹豫不决。我在某处读到,可分配数组比指针数组具有显着优势:

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

2)不可能发生内存泄漏

有人可以证实这一点吗?您建议使用哪一个?这两种替代方案之间的代码执行速度结果如何?

I am writing a new code in Fortran and hesitating between using allocatable arrays or pointer arrays. I read somewhere that allocatable arrays have significant advantages over pointer arrays:

1) More efficient because they are always contiguous in memory

2) No memory leaks are possible

Can someone confirm this? Which one would you advise to use? What are the results in term of execution speed of the code between these two alternatives?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

夜光 2024-08-29 15:05:18

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

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

使用指针,您可以重新分配指针,从而导致一些内存无法访问并丢失——泄漏的一种形式。如果可分配项可以完成这项工作,我建议使用该方法而不是指针。

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

Allocatable arrays can result in more efficient code because the arrays will be contiguous. Particularly if the array is passed to a subroutine, being contiguous can prevent the need for the compiler creating a temporary copy.

For local variables in subroutines (without the SAVE attribute) (for Fortran 95 and higher), allocatable arrays are automatically deallocated upon exit from the subroutine, avoiding a memory leak. Memory leaks aren't possible with allocatables, except in the sense of the programmer not deallocating an array that is no longer need.

With pointers, you can reassign a pointer, leaving some memory inaccessible and lost -- one form of a leak. If an allocatable will do the job, I recommend using that method instead of a pointer.

Some reasons to use pointers: taking a section of an array, or creating a data structure such as a linked list. For the purpose of creating an array of size determined at run time, I'd use an allocatable.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文