7

我最近和一个说他做过 Fortran 编程的人交谈过(从很久以前),但他不能告诉我 Fortran 是否有垃圾收集器。他告诉我他没有在 Fortran 中使用 malloc 或 free,所以我的假设是它确实有一个垃圾收集器?还是fortran没有垃圾收集器,只是泄漏内存,程序结束时会被操作系统回收?我对 Fortran 一无所知,只是它以前被使用过。我也尝试了快速谷歌搜索,但找不到任何东西。

4

2 回答 2

21

现代 Fortran 有多种声明变量的方法。简单声明的项目将在实体范围内存在。所以在一个过程中声明的“real, dimension (N) :: array”将在该过程返回时自动消失。自然地,在主程序或模块变量或公共(过时)中声明的变量将在程序期间持续存在。

可以使用“allocate”动态分配变量(为此,必须使用 allocatable 属性声明它们)。由于 Fortran 95 过程本地的可分配变量会在过程返回时自动释放!他们不会泄漏内存!(一些程序员可能认为显式释放变量是一种很好的做法,即使它不是绝对必要的。)(当然,如果不显式释放一个你知道你不知道的变量,你可能会浪费内存不再需要了。)

使用指针可能会泄漏内存。您可以使用指针分配内存,然后将指针分配给另一个变量,从而丢失先前的关联。如果您没有释放该内存,那么您就有泄漏。与其他语言相比,Fortran 对指针的需求更少……许多事情都可以使用可分配变量来完成,这些变量更安全——没有内存泄漏。

相关问题:Fortran 可分配数组生存期ALLOCATABLE 数组或 POINTER 数组?

于 2012-12-20T07:41:24.200 回答
3

不,Fortran 没有垃圾收集器。但是,在这种程度上,F90有一个附加包。不,我没有使用它。

于 2012-12-20T07:13:52.687 回答