什么时候用C
分配Lua gc内存void *lua_newuserdata (lua_State *L, size_t size);
? 当Lua中没有任何引用指向它时,或者我是否必须小心删除它?
答案 0 :(得分:7)
lua_newuserdata
分配内存,但不给它C所有权。您可以根据需要使用它,但不应该释放它;一旦没有对userdata对象的引用,它就会被lua自动释放。
这样做的必然结果是,如果你在C中长时间保持指示它,你必须要小心Lua在你还在使用时不会收集它。确保在完成从C语言中使用它之前不要删除对userdata的所有Lua引用 - 或者相反,使用__gc
元方法确保在收集对象时通知C。
答案 1 :(得分:6)
当>> Lua中没有对的引用时,将释放分配了lua_newuserdata
的内存。这就是垃圾收集的工作原理。有重要的后果:
无需在C程序中释放该内存。根本不用担心释放它。
不要释放那段记忆。
不要在C程序中存储指向该内存的指针,并假设它永远有效。
如果您想使用该指针,请确保在Lua中有对它的引用。
换句话说,在调用lua_newuserdata
之后,你需要在Lua中的某个地方存储该userdata值(一个全局变量,一个表项,一个函数upvalue),如果你将在以后的C程序中使用它。否则它会在你回到Lua后消失。
答案 2 :(得分:2)
Lua确实会分配内存但不会给你这个分配内存的所有权。所以简短的回答是:不,不要释放Lua分配的内存。