lua 长短字符串

如题所述

在 Lua 中,字符串分为长、短两种类型,划分的界线是 LUAI_MAXSHORTLEN,数值为40。

深入探索,我们首先定义了 TString 类型。这里,CommonHeader 作为 Lua 的垃圾收集 (GC) 对象类型共用头部,暂时不讨论其细节。

起初,对于字符串类型对象的布局感到困惑,以为只包含额外属性而非关联的字符指针。然而,通过查找宏定义,找到了字符指针 ts,它实际上是 TString 对象。这里可以假定,通过特定操作,对象能偏移保持与字符串资源的关联。

接下来,我们观察短字符串的创建过程。短字符串设计的核心在于减少重复创建大量相同字符串,并在创建时计算哈希值,以方便后续查找唯一的对象。

长字符串的创建则有所不同,每次定义都会创建新的对象,同时设置好垃圾回收关系(通过 luaC_newobj 函数将新对象加入到 _G 的垃圾回收检查列表)。关于垃圾回收机制的详细理解还有待深入。

比较短字符串与长字符串的内存使用情况,明显存在显著差异。短字符串通过避免重复创建,有效节约了内存资源,而长字符串每次定义都创建新对象,占用的内存数量更大。
温馨提示:答案为网友推荐,仅供参考
相似回答
大家正在搜