字符串引用
String referencing
在我的代码中,我需要跟踪本地的某个值(一个字符串,总是...)。我想知道 是否 运行 时间将重新创建 或 将此字符串放入本地后检查此字符串,在官方 Lua 5.3 实现。有任何想法吗?在这个 lua.org document 中,我至少听说过 Lua 实现会进行字符串内部化(保留任何字符串的单个副本)。
我正在重新启动我的代码,所以到目前为止我做了一些无关紧要的事情。我可以为每个函数做的一个例子是:
local src = l[1]
-- `src` would hold a string
字符串是否被驻留实际上不是问题 - 字符串驻留只是一种加速字符串比较的机制,并且(可能)以创建字符串所需的 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 很简单。
在我的代码中,我需要跟踪本地的某个值(一个字符串,总是...)。我想知道 是否 运行 时间将重新创建 或 将此字符串放入本地后检查此字符串,在官方 Lua 5.3 实现。有任何想法吗?在这个 lua.org document 中,我至少听说过 Lua 实现会进行字符串内部化(保留任何字符串的单个副本)。
我正在重新启动我的代码,所以到目前为止我做了一些无关紧要的事情。我可以为每个函数做的一个例子是:
local src = l[1]
-- `src` would hold a string
字符串是否被驻留实际上不是问题 - 字符串驻留只是一种加速字符串比较的机制,并且(可能)以创建字符串所需的 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 很简单。