在我的代码中,我需要在本地跟踪某个值(字符串,总是......)。我想知道是否运行时将重新创建或在将此字符串放入官方Lua 5.3实现的本地后检查该字符串。有任何想法吗?在这个lua.org document我至少听说过Lua实现字符串内化(保留任何字符串的单个副本)。
我正在重新启动我的代码,所以到目前为止我做了一些微不足道的事情。我可以根据功能做的一个例子是:
local src = l[1]
-- `src` would hold a string
答案 0 :(得分:3)
如果字符串是否实际上并不是一个问题 - 字符串实习只是一种加速字符串比较的机制,并且(可能)以牺牲创建字符串所需的CPU为代价来节省一些内存。
重要的是lua中的字符串通常称为reference types
。也就是说,运行时值仅保存并共享对字符串的引用,并将字符串分配给运行时值只是复制指针并为此值设置正确的标记。
您的代码所做的另一件事是,它允许您在执行函数期间避免多次哈希查找。例如,
local a = tbl['mykey']
-- ...
local other_a = tbl['mykey']
将导致两次哈希查找,而
local cached_a = tbl['mykey']
-- ...
local a = cached_a
-- ...
local other_a = cached_a
会将其减少为一次查找。但是,对于整数键,这通常不是什么大问题。但有时甚至整数键触发哈希查找,即使它们很小。此外,它依赖于实现。 Lua非常简单。