Lua 源码分析之Table - Hash部分内部原理

Lua设计里面,Table是一个特别关键的部分。它可以表示很多的数据结构,可以是Array,可以是Map,可以根据自己的需要实现栈,队列等等,使用起来方便。源码里面的设计显得特别重要了,它是被很频繁地使用,提高性能是设计者重中之中。

首先先看一下Lua的总体设计:它分为两部分,分别是数组Array和Hash部分。数组部分主要是存储下标从1开始的连续不为空的节点内容,如果是中间断开部分会存到hash部分。Hash部分是存储各种类型的离散数据。如下图

Table内部结构概览图

 

1.对于一个Table初始化的时候,如果是空表,即Array和Hash部分长度都为0;下面着重看Hash部分
    lua代码: local tb = {};
    c代码: lua_newtable(L);
    t->lsize = 0;
    t->lsizenode = 0; //对数值,用来计算2的幂,结果为当前内存分配node数量(包括空的或使用的)
    t->node = dummynode; //内存的头,在分配内存时,分配了一个数量为lsizenode连续的Node类型的内存块
    t->lastfree = gnode(t,0); //内

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值