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 函数的主要内容,如果未能解决你的问题,请参考以下文章
fortran 中的combinations_with_replacement 函数?