久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長(zhǎng)資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      lua table 長(zhǎng)度解析

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

      lua table 長(zhǎng)度解析

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

      如果 t->node 是 table 的 hash 部分存放,如果是空,就返回?cái)?shù)組的長(zhǎng)度。

      第一種例子:

      lua table 長(zhǎng)度解析

      對(duì)于這種,初始化了數(shù)組長(zhǎng)度,t 的長(zhǎng)度是 7,為什么呢。因?yàn)樽詈笠晃徊皇?nil

      以下情況 t 的長(zhǎng)度就是 5。

      lua table 長(zhǎng)度解析

      第二種例子:

      lua table 長(zhǎng)度解析

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

      lua table 長(zhǎng)度解析

      這樣的話,t的長(zhǎng)度是多少呢???

      答案是 2,為什么呢?

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

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

      lua table 長(zhǎng)度解析

      然后會(huì)進(jìn)入(lvm.c)

      lua table 長(zhǎng)度解析

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

      lua table 長(zhǎng)度解析

      然后調(diào)用 rehash

      lua table 長(zhǎng)度解析

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

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

      lua table 長(zhǎng)度解析

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

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

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

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

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