字符串引用

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

我正在重新开始我的代码,所以我到目前为止做了微不足道的事情。我可能会根据每个函数执行以下操作的示例:

local src = l[1]

-- `src`会保存一个字符串
点赞
用户2612002
用户2612002

如果这些字符串被翻译或未被翻译实际上并不重要-字符串翻译只是一种加速字符串比较和(可能)节省一些内存的机制,但却要以 CPU 为代价来创造字符串。

重要的是,在Lua中,字符串通常被称为“引用类型”。也就是说,运行时值只保留和共享对字符串的引用,并将字符串分配给运行时值只是复制指针并设置该值的适当标记。

你的代码还可以避免在函数执行期间进行多次哈希查找。例如,

local a       = tbl['mykey']
-- ...
local other_a = tbl['mykey']

将导致两个哈希查找,而

local cached_a = tbl['mykey']
-- ...
local a = cached_a
-- ...
local other_a = cached_a

将将其减少为一个查找。但有时即使是小的整数键也会触发哈希查找。同时,它也取决于实现。Lua非常简单。

2017-07-18 23:26:23