Lua 为什么uu gc没有';收集表?的垃圾时不工作;
最近,我在学习垃圾收集。我编写了一个示例。代码如下:Lua 为什么uu gc没有';收集表?的垃圾时不工作;,lua,Lua,最近,我在学习垃圾收集。我编写了一个示例。代码如下: mytablea {"1","2","3"} print(collectgarbage("count")) for i = 1, 500000 do table.insert(mytable, i) end debug.setmetatable(mytable, {_gc = function ()print("dead")end}) mytable = nil print(collectgarbage("count")) print
mytablea {"1","2","3"}
print(collectgarbage("count"))
for i = 1, 500000 do
table.insert(mytable, i)
end
debug.setmetatable(mytable, {_gc = function ()print("dead")end})
mytable = nil
print(collectgarbage("count"))
print(collectgarbage("collect"))
print(collectgarbage("count"))
我对终端中为什么没有输出感到困惑(gc似乎不工作)。但是在完成调用后,它的内存确实会减少!我想知道Lua5.1是否在表中不支持此功能,或者我的linux是否有问题(可能是ubuntu中的一些错误)。正确的元表条目是
\uu gc
,而不是\u gc
在任何情况下,Lua 5.1都不支持表的gc元方法。Lua 5.1不支持表上的
\uu gc
(注意,它是两个下划线,不是一个)。
如果可能,请移动到更新版本的Lua(即5.2或5.3)以获得支持
如果你真的需要它;您可以使用未记录的newproxy
函数获取用户数据,以将\uu gc
附加到:
do
local p = newproxy(false);
debug.setmetatable(p, {__gc = function() print("dead") end})
local t = {some_key = p}
end
collectgarbage()
collectgarbage()
我在需要lua 5.1兼容性的项目中使用它,例如Oh!文件中真的没有提到桌子!谢谢,我应该仔细阅读这份文件的!垃圾收集元表条目就是这样的:Lua5.1只支持userdata,LuaJIT支持cdata,Lua5.2支持表。所有3个版本都在积极使用。