1

我不是 GC 方面的专家,但我总是认为 GC 需要VM才能工作,对吗?

如果我是对的,那么本机代码如何获得 GC?

4

2 回答 2

4

不,您不需要 VM 来进行垃圾收集。所以这让我们没有问题要回答:-)

一般来说,要进行 GC,您只需要跟踪程序状态的各种细节。特别是您需要知道实时值(程序关心的对象)的位置。

于 2013-08-08T21:29:55.257 回答
1

Ocaml 维护两个不同的堆;一个用于 Ocaml 数据,一个用于 malloc'ed C 数据。如果您从 C FFI 函数返回值(通常是抽象类型,由指向 C 堆的智能指针表示)这些值将由 ocaml 垃圾收集器跟踪。当 GC 注意到数据不可达时,它将通过智能指针调用相关的终结函数。因此,可以让 C 接口在创建对象时运行 malloc,并在垃圾回收时释放。

http://caml.inria.fr/pub/docs/manual-ocaml/manual033.html

于 2013-08-08T22:12:19.263 回答