fortran有垃圾收集器(gc)吗?

时间:2012-12-20 07:09:07

标签: garbage-collection fortran

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

2 个答案:

答案 0 :(得分:19)

现代Fortran有很多方法来声明变量。简单声明的项目将在实体范围内存在。因此,当过程返回时,过程中声明的“真实,维度(N)::数组”将自动消失。当然,在主程序或模块变量中声明的变量或常见的(过时的)变量将在程序的持续时间内持续存在。

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

可能会使用指针泄漏内存。您可以使用指针分配内存,然后将指针指向另一个变量,从而丢失先前的关联。如果你没有释放那个记忆,你就会有泄漏。 Fortran中对指针的需求少于其他一些语言......很多事情都可以使用可分配的变量来完成,这些变量更安全 - 没有内存泄漏。

相关问题:Fortran allocatable array lifetimeALLOCATABLE arrays or POINTER arrays?

答案 1 :(得分:2)

不,Fortran没有垃圾收集器。但是在这种程度上有add-on package for F90。不,我没有用过它。