Obj*_*ive 5 c memory lua garbage-collection
什么时候用C语言分配Lua gc内存
void *lua_newuserdata (lua_State *L, size_t size);
Run Code Online (Sandbox Code Playgroud)
?当Lua中没有任何引用指向它时,或者我是否必须小心删除它?
lua_newuserdata分配内存但不给它C所有权.您可以根据需要使用它,但不应该释放它; 一旦没有对userdata对象的引用,它将被lua自动释放.
这样做的必然结果是,如果你在C中长时间保持它的指针,你必须要小心Lua在你还在使用时不会收集它.确保在完成从C语言中使用它之前不要删除对userdata的所有Lua引用 - 或者相反,使用__gcmetamethod确保在收集对象时通知C.
分配的内存在 Lua 内部lua_newuserdata没有引用时被释放.这就是垃圾收集的工作原理.有重要的后果:
无需在C程序中释放该内存.根本不用担心释放它.
不要释放那段记忆.
不要在C程序中存储指向该内存的指针,并假设它永远有效.
如果要使用该指针,请确保在Lua中有对它的引用.
换句话说,在调用之后lua_newuserdata,如果您将在以后的C程序中使用它,则需要将该userdata值存储在Lua中的某个位置(全局变量,表条目,函数upvalue).否则它会在你回到Lua后消失.
| 归档时间: |
|
| 查看次数: |
1772 次 |
| 最近记录: |