LuaJIT指针和垃圾收集

时间:2017-08-18 00:47:42

标签: c pointers lua garbage-collection luajit

我正在努力完全理解LuaJIT的垃圾收集器将使用FFI处理什么以及我必须手动管理什么,所以我肯定不会泄漏。

关于垃圾收集器阅读LuaJIT FFI Semantics Docs以下断言是真的吗?:

  1. 如果使用ffi.new('float[?]',n)分配数组,那么gc可以跟踪其引用并在必要时收集吗?
  2. 必须手动处理使用ffi.malloc(sizeof('float[n]')),例如ffi.free或提供"终结器"例如local p = ffi.gc(ffi.malloc(sizeof('float[n]')), ffi.free)
  3. 如果使用ffi.load加载的库包含函数float * example(void);并且库已加载到名称空间Ex中,则在

    local ptr=Ex.example()

    ptr存储指针,当没有对ptr的引用时,gc会 收集ptr并且记忆会被泄露?

  4. ffi.gc(ptr, ffi.free)让垃圾收集器知道ptr确实是一个指针,当ptr本身没有引用时,它指向的内存可以回收吗?

  5. In saying

      

    C函数返回的内存区域(例如来自malloc())必须是   当然是手动管理(或使用ffi.gc())。指向cdata的指针   对象与C函数返回的指针无法区分   (这是GC不能遵循它们的原因之一)。

    这是否意味着即使C库函数的命名空间被赋予FFI,也知道返回值是指针,垃圾收集不能自动执行(4)?

    Mike Pall是什么意思when he says

      

    "但即使编译了该函数[ffi.gc()] ...... GC也会   必须最终调用终结器,这是昂贵的。"

    他只是指在这种情况下对ffi.free的函数调用?如果是这样,ffi.new将如何解决这个开销?

0 个答案:

没有答案