hlist_head / hlist_node 设计浅析

Linux内核提供的数据结构里,除了常见的list,还有他的另一个孪生兄弟——hlist(由struct hlist_headstruct hlist_node构成)。hlist结构如下:

struct hlist_head {
    struct hlist_node *first;
};

struct hlist_node {
    struct hlist_node *next, **pprev;
};


就像hlist名字中h所预示的那样,他主要用于hash_table。在典型的hash_table,我们用链表处理散列冲突(colision)。此时,我们都是从数组的某一个位桶(slot)出发,沿着链表搜索,从而获取目标元素。

在这种情况下,很难想象会有这么一种需求——我们需要重新回到散列数组的位桶中,也就是说,我们不需要一个用于指向数组元素的指针。

hlist discription

这样,我们就省下了一个指针!或者说,省下了n * sizeof(void *)个字节(这里的n是散列数组的长度)。以Linux2.6.11中的pid_hash[]、32位系统为例,共有4张表,每张表2048个slot,省下了

2

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值