【问题标题】:What is the reference counting in Lua?Lua 中的引用计数是什么?
【发布时间】:2015-01-29 08:51:22
【问题描述】:

看下面的例子:

local t = {}

t[1] = function() return 3 end 
t[2] = function() return 2 end
t[3] = 3

local a = t[1]

local b = t
t[1] = nil
collectgarbage("collect") --reclaim memory
print(a)  --function
print(b[1])   -- nil
print(b[2])   --function
print(b[3])   --3

为什么我仍然可以打印 'a' 而不是 'b[1]'? 此外,我在 lua 参考手册中看到“垃圾收集器忽略了弱引用”。如何定义“忽略”?

【问题讨论】:

    标签: lua garbage-collection reference-counting


    【解决方案1】:

    Assignment (=) 在 Lua 中分配某物的值,它从不创建别名。

    因此,在将b[1] 分配给a 之后,将nil 分配给b[1]a 完全无关。


    关于您的 GC 问题:

    您的 sn-p 中只有强引用,没有弱引用。
    ignored表示在确定生命对象时不遵循。当然,如果目标被声明为不可访问,则nil-ed out。
    Lua 有一个跟踪 GC,而不是一个引用计数的,循环引用会有问题。

    【讨论】:

    • 在哪里可以找到关于 lua GC 的资料?
    • 看Lua官网的官方文档,可读性很强。 lua.org/manual
    猜你喜欢
    • 2011-06-27
    • 2021-08-27
    • 2022-11-13
    • 2011-05-18
    • 2017-01-15
    • 2010-11-19
    • 2011-12-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多