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