Lua设计里面,Table是一个特别关键的部分。它可以表示很多的数据结构,可以是Array,可以是Map,可以根据自己的需要实现栈,队列等等,使用起来方便。源码里面的设计显得特别重要了,它是被很频繁地使用,提高性能是设计者重中之中。
首先先看一下Lua的总体设计:它分为两部分,分别是数组Array和Hash部分。数组部分主要是存储下标从1开始的连续不为空的节点内容,如果是中间断开部分会存到hash部分。Hash部分是存储各种类型的离散数据。如下图

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); //内