取消分配大数组

Unallocate large array

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

let a = Array.make 10000 0;;

如何“删除”a

提前致谢。

简短的回答是当值无法再被访问时(由垃圾收集器)将其删除。

如果 a 的这个定义是一个全局定义,它总是可以访问的。因此它永远不会被删除。

相反,如果这是函数中的局部定义,它将在函数 returns 时被删除(或者如果最后一个引用在函数结束之前可能会更快)。

一般来说,不可变的全局值永远不会被垃圾回收。如果你想要这个,你可以使用一个可变的全局值:

let a = ref (Array.make 10000 0)

当您不再需要 a 时,您可以这样做:

a := [| |]