linux内核哈希链表解析

本文介绍了Linux内核中的哈希链表数据结构,包括hlist_head和hlist_node的定义,以及相关的操作函数和宏。哈希链表在内核的多个关键模块中起到重要作用,如dentry、进程查询和文件系统。通过哈希函数,键值与数组位置关联,解决冲突。文章还详细解析了链表的插入、删除和遍历等操作。
摘要由CSDN通过智能技术生成
哈希表的介绍  hlist
linux内核里边除了著名的list双向循环链表以外,还有一个重要的数据结构,就是哈希链表。哈希链表也在很多重要的地方有所使用,比如linux内核的dentry,进程查询,文件系统等,可以说,弄明白hlist对于理解linux内核具有重要的意义。
数据结构的介绍
struct hlist_head 
{
	struct hlist_node *first;
};
struct hlist_node 
{
 struct hlist_node *next, **pprev;
};


linux内核的哈希链表有两个数据结构组成,一个是hlist_head是哈希表的表头,一个是hlist_node,是哈希表的后续节点。在使用的时候,一般定义一个struct hlist_head xxx[100]数组(100只是一个代表的数字,视具体情况而定),采取哈希函数来将键值与数组的对应的地址联系起来,如果出现冲突的话,就在hlist_head的后边继续添加。
hlist_head的成员first指针指向后续的第一个节点,如果哈希链表是空的话,就为NULL。
为什么hlist_head不弄成双向链表呢,因为为了节约空间,如果一个指针的话,一个哈希数组的空间消耗就会减半。
hlist_node的成员next指向后续的节点的地址,如果为空就是NULL,另一个成员pprev是二级指针,指向前一个节点的next成员的地址,如果前一个成员是hlist_head的话,pprev的值就是前一个的first指针的
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值