erlang中dict的实现

本文详细介绍了Erlang中dict数据结构的实现,包括seg_size、max_seg等常量的含义,以及dict的扩展和收缩策略。在字典扩展时,当元素个数超过exp_size(当前活跃slot的5倍)时,会进行扩展;当元素个数少于con_size(当前活跃slot的3倍)时,会进行收缩。文章还探讨了get_slot函数的实现和可能的哈希冲突处理。
摘要由CSDN通过智能技术生成
首先来看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的数量)
<
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值