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

Alf*_*red 5 garbage-collection fortran

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

M. *_* B. 19

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

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

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

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

  • 我将补充说,对于可分配的派生类型组件也是如此。它们会自动与父级的解除分配(手动或自动)解除分配。 (2认同)
  • 第二段第一句的措词不包括括号部分中的指针。作为“ can”的扩展,在现代的Fortran(2003+)中,也可以不用分配语句就可以动态分配可分配地址。第三段第二句的含义是向后分配。关于指针,我认为该标准在技术上*允许*进行垃圾收集(但明确地*不需要*)-您“可能”有泄漏。我以为最近的标准中实际上有关于此的注释或类似注释,但我找不到它-也许我的回忆有误。 (2认同)