首先来看dict定义:
-define(seg_size, 16).
-define(max_seg, 32).
-define(expand_load, 5).
-define(contract_load, 3).
-define(exp_size, (?seg_size * ?expand_load)).
-define(con_size, (?seg_size * ?contract_load)).
-record(dict,
{size=0 :: non_neg_integer(), % Number of elements
n=?seg_size :: non_neg_integer(), % Number of active slots
maxn=?seg_size :: non_neg_integer(), % Maximum slots
bso=?seg_size div 2 :: non_neg_integer(), % Buddy slot offset
exp_size=?exp_size :: non_neg_integer(), % Size to expand at
con_size=?con_size :: non_neg_integer(), % Size to contract at
empty :: tuple(), % Empty segment
segs :: segs(_, _) % Segments
}).
n: 活跃的slot的数量
maxn: 最大slot数量
bso: 这个字段很让人疑惑,通过代码知道其值为maxn/2
exp_size: 当字典中元素个数超过这个值时,字典需要扩展。
con_size: 当字典中元素个数少于这个值时,字典需要压缩(减少slots的数量)
<