你是否必须触发销毁使用Python-CFFI中的ffi.gc()创建的变量的最后一个引用?

时间:2016-03-31 19:06:33

标签: python python-cffi

阅读Python CFFI documentation

  

界面基于LuaJIT的FFI(...)

继续阅读LuaJIT website(约ffi.gc()):

  

此功能允许将非托管资源安全地集成到LuaJIT垃圾收集器的自动内存管理中。典型用法:

local p = ffi.gc(ffi.C.malloc(n), ffi.C.free)
...
p = nil -- Last reference to p is gone.
-- GC will eventually run finalizer: ffi.C.free(p)

因此,使用Python-CFFI,你是否必须触发销毁对使用ffi.gc实例化的变量的最后一个引用(=需要一个特殊的函数来解除分配,因为它的某些部分是动态分配的)将其设置为({)ffi.NULL

1 个答案:

答案 0 :(得分:1)

Python的设计使得所有对象在没有更多引用(或不久之后)时就会被垃圾收集,就像任何其他垃圾收集语言(包括Lua)一样。明确设置p = None(或del p)的技巧只会确保此局部变量p不会使对象保持活动状态。例如,如果它是此函数中最后完成的事情之一,则毫无意义(除非特殊情况)。你不需要它,只需要释放一个包含常规字符串对象的变量。