我不是GC的专家,但我总是认为GC需要 VM 才能正常工作,我是对的吗?
如果我是对的,那么本机代码如何获得GC?
答案 0 :(得分:4)
不,您不需要VM来进行垃圾回收。所以这让我们毫无疑问地回答: - )
一般来说,要做GC,您只需要跟踪程序状态的各种细节。特别是你需要知道实时值(程序关心的对象)的位置。
答案 1 :(得分:1)
Ocaml保留了两种不同的堆;一个用于Ocaml数据,一个用于malloc'ed C数据。如果从C FFI函数返回值(通常是抽象类型,由智能指针表示到C堆中),那些值将由ocaml垃圾收集器跟踪。当GC注意到数据无法访问时,它将通过智能指针调用关联的终结功能。因此,可以让C接口在创建对象时运行malloc,并在收集垃圾时自由运行。