全局变量数量是否影响性能?

我想知道在 Lua 中是否有太多全局变量会影响访问全局变量时的速度。

例如,如果我的程序有 10,000 个全局变量,那么调用全局函数 A 是否会比仅有 100 个全局变量的程序中的函数调用更慢?

Lua 如何找到已注册的全局变量?它使用一些哈希映射吗?

点赞
用户3574628
用户3574628

在Lua中,全局变量存储在名为_G的表中。由于可能需要调整表的大小,向大表中添加键有时可能会变慢。我不知道这种减速何时变得明显。据我所知,无论表的大小如何,访问键应该很快。

2019-07-06 14:43:21
用户734069
用户734069

基本上,在 Lua 中存储数据的几乎所有都是某种形式的表格(局部变量是著名的例外)。这包括全局变量。因此全局访问是表格访问,而它们被实现为散列表。

对散列条目的访问是分摊 O(1),因此不会因表中条目数量而异。现在,“分摊 O(1)”允许一些不稳定性,但这不会基于表格大小,而是基于键的散列发生冲突的方式。显然,更大的表格意味着可能发生更多碰撞,但更大的表格也使用更多的散列条目,因此降低了碰撞的机会。因此,两者通常会相互抵消。

基本上,你不应该关心。在任何真实的程序中,访问全局变量不会是你面临的主要性能问题。

2019-07-06 17:25:24