lua源码分析:字符串

本文深入分析了Lua中的字符串类型TString,包括其结构、长字符串与短字符串的区别,以及如何在全局状态global_State的缓存strcache和字符串表strt中查找或创建新字符串。重点介绍了luaS_new、luaS_newlstr和luaS_createlngstrobj等创建字符串的函数,以及luaS_resize函数如何根据需要调整字符串表的大小。
摘要由CSDN通过智能技术生成

 

字符串类型

typedef struct TString {

  CommonHeader;

  lu_byte extra;          短字符串保留字

  lu_byte shrlen;     短字符串长度

  unsigned int hash;   字符串hash值

  union {

    size_t lnglen;    长字符串长度

    struct TString *hnext;  指向下一个字符串

  } u;

} TString;

由定义可知,TString区分长字符串和端字符串。接下来我们看TString相关函数

在学习相关接口实现之前,我们还需要了解一个重要的数据结构:global_State,

它是一个全局对象,其中的两个成员和TString接口密切相关:

TString *strcache[STRCACHE_N][STRCACHE_M];  保存TString接口字符串缓存

stringtable strt;           是TString的hash表

Stringtable定义

typedef struct stringtable {

  TString **hash;

  int nuse;  /* number of elements */

  int size;

} stringtable;

 

我们主要关注以下三个创建TString的接口

LUAI_FUNC TString *luaS_newlstr (lua_State *L, const char *str, size_t l);

LUAI_FUNC TString *luaS_new (lua_Stat

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值