Fortran 90/95:释放变量

计算科学 数值分析 表现 正则
2021-12-02 05:40:09

我理解当某些变量或数组需要在程序中稍后重用,或者可能暂时不使用时释放内存的至关重要性。然而,根据我在科学计算方面的经验,许多编写的代码都是为了作为作业运行并产生结果,而不是传统软件(例如网络浏览器)的情况,它正在监听用户输入而不知道有多少可能需要内存。

因此,如果在整个程序中使用了某些数组和变量,是否有必要在退出之前将程序的一部分专门用于释放所使用的内存?我的理解是操作系统无论如何都会从终止的程序中取回所有内存。

期待有关该主题的任何想法和意见。

1个回答

当变量超出范围时,Fortran 的可分配变量会自动解除分配(请参阅http://www.fortran90.org/src/best-practices.html#allocatable-arrays)。这意味着不可能通过未能释放可分配数组来创建内存泄漏。这是使用可分配数组而不是指针的一大好处。

此外,分配和释放内存需要时间,因此不建议重复分配和释放数组,除非有充分的理由这样做。

最后,正如您所提到的,一旦程序终止,操作系统将收回程序使用的所有内存。无论内存是如何分配的,这都是正确的。在您提到的情况下(在程序的整个生命周期中使用的可分配数组),在退出之前解除分配可能更多地被视为一个簿记步骤而不是必要性。它是一种自我记录的形式,也使代码的用户意识到仍然分配的数组的存在。如果以后要修改代码或将其合并到更大的程序中,这可能很重要。