Lua源代码的阅读(三)table的实现

  数据结构

/*

    1: table的数组部分被储存在TValue *array,其长度信息存于int sizearray;

    2: 哈希表储存在Node *node,哈希表的大小用 lu_byte lsizenode 表示;

    3: 由于哈希表的大小一定为2的整数次幂,所以这里的lsizenode表示的是幂次,而不是实际大小

    4:每个table结构,最多会由三块连续内存构成。

       一个Table 结构;

       一块存放了连续整数索引的数组;

       一块大小为2的整数次幂的哈希表;

    5:哈希表的最小尺寸为 20次幂,也就是1;

    6:为了减少空表的维护成本,Lua在这里做了一点优化。宏定义了一个不可改写的空哈希表:dummynode

    7:让空表被初始化时,node域指向这个dummynode节点。它虽然是一个全局变量,

      但因为对其访问是只读的,所以不会引起线程安全问题

 */


Lua源代码的阅读(三)table的实现_第1张图片Lua源代码的阅读(三)table的实现_第2张图片

中setnodevector 分则使LuaM关API 



Lua源代码的阅读(三)table的实现_第3张图片

算法

你可能感兴趣的:(Lua源代码的阅读(三)table的实现)