欧美亚洲中文,在线国自产视频,欧洲一区在线观看视频,亚洲综合中文字幕在线观看

      1. <dfn id="rfwes"></dfn>
          <object id="rfwes"></object>
        1. 站長資訊網(wǎng)
          最全最豐富的資訊網(wǎng)站

          lua table 長度解析

          先來看 lua table 源碼長度獲取部分(ltable.c)

          lua table 長度解析

          j 是數(shù)組部分的長度。首先判斷數(shù)組長度大于 0,并且數(shù)組最后一個是 nil,就用二分法查找,返回長度。

          如果 t->node 是 table 的 hash 部分存放,如果是空,就返回數(shù)組的長度。

          第一種例子:

          lua table 長度解析

          對于這種,初始化了數(shù)組長度,t 的長度是 7,為什么呢。因為最后一位不是 nil

          以下情況 t 的長度就是 5。

          lua table 長度解析

          第二種例子:

          lua table 長度解析

          大家都應(yīng)該知道 t 的長度是 5。

          lua table 長度解析

          這樣的話,t的長度是多少呢???

          答案是 2,為什么呢?

          對于 t[6] 的插入,導(dǎo)致 table 表 rehash。

          t[6] 會先調(diào)用(lapi.c)

          lua table 長度解析

          然后會進入(lvm.c)

          lua table 長度解析

          然后會調(diào)用(ltable.c)luaH_newkey這個函數(shù)

          lua table 長度解析

          然后調(diào)用 rehash

          lua table 長度解析

          這個地方其實是數(shù)組部分和放到hash部分的計算,nums 是統(tǒng)計數(shù)字的分布,仔細看代碼會知道數(shù)組長度是 2 的 n 次方。

          這兒 nil 不是數(shù)字不會納入統(tǒng)計,所以 1,2,5,6 會計算出數(shù)組長度是 4,其余部分放入到 node 部分

          lua table 長度解析

          table 是有數(shù)組和 node hash 部分組成。

          這樣根據(jù)我們前面看的函數(shù),第四個是 nil,所以用二分法找出的長度是 2。

          這樣是 lua 數(shù)組里面如果 nil,可能會導(dǎo)致的坑,當然只是 rehash 導(dǎo)致的。

          原文地址:https://www.cnblogs.com/wallini/p/4188499.html

          贊(0)
          分享到: 更多 (0)
          網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號