Julia的ccall分配数据的垃圾收集

时间:2016-03-16 08:02:48

标签: julia

我希望有人可以澄清Julia垃圾收集器行为的一个方面,以及它如何与使用ccall调用C函数分配的内存进行交互。

例如,我正在拨打以下电话:

    setup::Ptr{Void} = ccall(("vDSP_DCT_CreateSetup", libacc), Ptr{Void},
                         (Ptr{Void}, UInt64, UInt64),
                         previous, length, dct_type)

此函数为DFT_Setup对象分配内存并初始化内存(详细信息无关紧要)。该库还提供了在DFT_Setup上调用的析构函数,以便在不再需要该对象时释放内存。

在Julia中调用析构函数是否必要?即,垃圾收集器在适当时处理释放DFT_Setup,还是应该调用C解除分配器?

1 个答案:

答案 0 :(得分:5)

是的,Julia GC只能清理Julia自己分配的内存,它不知道ccall分配的内存。

解决这个问题的常用方法是从构造函数中定义的finalizer调用析构函数,例如:见RCall.jl