Fortran 释放 x 函数

Posted

技术标签:

【中文标题】Fortran 释放 x 函数【英文标题】:Fortran Deallocate x function 【发布时间】:2021-10-23 01:04:52 【问题描述】:

在 Fortran 编码语言中,Deallocate(x) 用于什么? x 变量是一个数组。我听说它会删除其中的所有元素。这是真的吗? 它的一个例子:

    Toplam = 0.0 
    DO K = 1, N 
    Toplam = (Ort - X(K))**2
     END DO ! bellek bloğu boşaltılıyor 
DEALLOCATE(X)
     Std_Sap = SQRT(Toplam/(N-1)) 
    PRINT *,"Ortalama : ",Ort 
    PRINT *,"Standart sapma: ",Std_Sap END PROGRAM Ortalama 

【问题讨论】:

看起来示例不完整,缺少X的定义(和可能的分配)。关于“Deallocate(x)是用来做什么的?x变量是一个数组。”的信息。跨度> 这能回答你的问题吗? When is array deallocating necessary? 【参考方案1】:

链接的问题When is array deallocating necessary? 非常密切相关,我会尽量避免重复在那里提出的观点,并严格回答要点“deallocate() 实际上做了什么”?

可分配变量(标量和数组)只是句柄或引用。在使用allocate() 分配它们之前,它们实际上并不引用内存的任何部分。这种分配给了他们一些他们占用的内存。在那一刻,状态从“未分配”变为“已分配”。 (可以使用allocated()函数查询状态。)

如果您有一个已分配的可分配(例如可分配数组),您可以使用deallocate() 解除分配。此释放从变量/数组中取回内存。该变量现在“未分配”并且不包含数据元素。它没有任何数组大小,您无法读取、写入,甚至无法打印size()shape(),它只是“未分配”——仅此而已。它不再指代任何特定的记忆。

您在问题中使用了“已删除”一词。内存可能不会被覆盖,并且已存储在那里的值可能会保留在那里。但它们不再属于该数组,内存可能会分配给其他可分配或指针变量。

正如链接的答案所示,在某些情况下,释放是自动执行的。

【讨论】:

以上是关于Fortran 释放 x 函数的主要内容,如果未能解决你的问题,请参考以下文章

fortran77 长语句如何换行

fortran 中的combinations_with_replacement 函数?

fortran关于数组内部函数的问题

怎样从 C 中调用 FORTRAN (C++, BASIC, Pascal, Ada, LISP) 的函数?反之亦然?

FORTRAN中如何定义全局变量

使用优化模块的 Scipy 错误。将数组转换为 fortran 失败