Ocaml 未分配大数组

Ocaml 未分配大数组,ocaml,Ocaml,我很好奇是否有办法删除和取消分配OCaml中的某些内容。例如,假设我使用以下方法初始化了一个数组: 让a=Array.make 10000 0;; 如何“删除”a 提前感谢。简单的回答是,当无法再访问值时,它们会被删除(由垃圾收集器删除) 如果a的此定义是全局定义,则始终可以访问。因此,它永远不会被删除 相反,如果这是函数中的本地定义,则在函数返回时将删除该定义(如果最后一个引用在函数结束之前,则可能会更早删除) 一般来说,不可变的全局值永远不会被垃圾收集。如果需要,可以使用可变全局值: le

我很好奇是否有办法删除和取消分配OCaml中的某些内容。例如,假设我使用以下方法初始化了一个数组:

让a=Array.make 10000 0;;
如何“删除”
a


提前感谢。

简单的回答是,当无法再访问值时,它们会被删除(由垃圾收集器删除)

如果
a
的此定义是全局定义,则始终可以访问。因此,它永远不会被删除

相反,如果这是函数中的本地定义,则在函数返回时将删除该定义(如果最后一个引用在函数结束之前,则可能会更早删除)

一般来说,不可变的全局值永远不会被垃圾收集。如果需要,可以使用可变全局值:

let a = ref (Array.make 10000 0)
当您不再需要
a
时,您可以执行以下操作:

a := [| |]

非常感谢你!答案非常清楚。您知道在
a
绑定到另一个值后是否可以收集数组吗?问题是是否有对数组(值)的引用,而不是对
a
(可以保存值的容器)的引用。因此,谨慎的回答是,不,对
a
的任何额外引用都不会阻止在执行
a:=[| |]
之后收集数组。