码迷,mamicode.com
首页 > 其他好文 > 详细

LUA的table实现

时间:2019-08-27 10:34:41      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:obj   数据结构   byte   ade   val   typedef   sign   设计   size   

数据结构

下面的结构体是lua中所定义的table

typedef struct Table {
    CommonHeader;
    lu_byte flags;  /* 1<<p means tagmethod(p) is not present */
    lu_byte lsizenode;  /* log2 of size of 'node' array */
    unsigned int alimit;  /* "limit" of 'array' array */
    TValue *array;    //数组
    Node *node;    // 哈希表
    Node *lastfree;    // 辅助寻找冲突节点的指针
    struct Table *metatable;
    GCObject *gclist;
} Table;

设计原理

众所周知,lua的table很强大,可以当数组也可以当哈希表,这得益于其Table结构的设计与实现。

从上面可以看到,array作数组,node作哈希表。

  • 如果table当作哈希表用,那么array的长度一般会相对较小,因为对key进行哈希后的结果比较分散。所以大都保存在node中。
  • 如果table当作数组用,那么array的长度一般会较大,因为key其实就是数组的下标。所以都在array中。

LUA的table实现

标签:obj   数据结构   byte   ade   val   typedef   sign   设计   size   

原文地址:https://www.cnblogs.com/xcw0754/p/11416545.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!