字符串引用

时间:2017-07-18 22:58:36

标签: lua lua-5.3

在我的代码中,我需要在本地跟踪某个值(字符串,总是......)。我想知道是否运行时将重新创建在将此字符串放入官方Lua 5.3实现的本地后检查该字符串。有任何想法吗?在这个lua.org document我至少听说过Lua实现字符串内化(保留任何字符串的单个副本)。

我正在重新启动我的代码,所以到目前为止我做了一些微不足道的事情。我可以根据功能做的一个例子是:

local src = l[1]

-- `src` would hold a string

1 个答案:

答案 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非常简单。