Lua 源码分析之Table - Rehash过程

Lua的Table的内存结构主要分array part和hash part,它们俩的内存大小是动态变化的,如果空间不够就需要分配更多的空间,如果空间利用率太少就需要缩减内存,这个过程叫做rehash。
现在来看看rehash是怎么样的过程。
rehash内部,主要是做了以下几件事:
    a.计算array part的key的数量
    b.计算hash part的key的数量
    c.计算新设的key之后array part部分的数量,
    d.计算一个新的array part部分需要分配的内存大小
    e.resize。(大概过程如上,后面是每个步骤的细节,如不需要了解,可以跳到最后了。)

static void rehash (lua_State *L, Table *t, const TValue *ek) {
	  int nasize, na;
	  int nums[MAXBITS+1];  /* nums[i] = number of keys with 2^(i-1) < k <= 2^i */
	  int i;
	  int totaluse;
	  for (i=0; i<=MAXBITS; i++) nums[i] = 0;  /* reset counts */
	  nasize = numusearray(t, nums);  /* count keys in array part */
	  totaluse = nasize;  /* all those keys are integer keys */
	  totaluse += numusehash(t, nums, &nasize);  /* count keys in hash part
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值