我的Lua代码是否存在内存泄漏问题?(Lua表)

3
这是我的代码示例:

这是我的代码示例:

listOfPeople = {}
listOfPeople["test"] = "hello"
listOfPeople = nil

“hello”字符串是否丢失并形成内存泄漏?
谢谢

1
Lua使用垃圾回收器,因此,除非Lua本身的实现存在泄漏,否则您不会泄漏内存。 - tkausl
1个回答

2
不会导致内存泄漏(假设Lua解释器没有漏洞),但是内存直到垃圾回收器运行其(完整)周期才被释放。您可以通过以下脚本看到效果:
collectgarbage()
print(collectgarbage("count"))
listOfPeople = {}
listOfPeople["test"] = "hello"
print(collectgarbage("count"))
listOfPeople = nil
collectgarbage()
print(collectgarbage("count"))

以下是使用Lua 5.2打印的输出:

14.5107421875   523
14.6533203125   669
14.5107421875   523

从结果可以看出,解释器所使用的内存增加了(因为其中包含一个表和两个字符串),当这些元素被垃圾回收后,内存使用量会减少。


2
实际上,由于"test""hello"是字面字符串,只有在封闭函数原型被收集时它们才会被回收。 - siffiejoe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接