linux内核 为什么大量使用双向链表

linux内核 为什么大量使用双向链表,第1张

在linux内核中,有大量的数据结构需要用到双循环链表,例如进程、文件、模块、页面等。若采用双循环链表的传统实现方式,需要为这些数据结构维护各自的链表,并且为每个链表都要设计插入、删除等 *** 作函数。因为用来维持链表的next和prev指针指向对应类型的对象,因此一种数据结构的链表 *** 作函数不能用于 *** 作其它数据结构的链表。

dereferencing pointer to incomplete type很明确说类型不完整,是这个结构体定义有问题,也就是

struct Node

{

    int data;

    struct Node* prv;

    struct Node* next;

}  //这个后边你没加

Node *node = (Node *)malloc(sizeof(Node))

Node *node2 = (Node *)malloc(sizeof(Node))

Node *node3 = (Node *)malloc(sizeof(Node))

node->next = node2

node2->prv = node//这里是node,不是node1

node2->next = node3

node3->prv = node2

//现在要删除node2

node2->prv->next = node3

node2->next->prv = node

node2->prv = NULL

node2->next = NULL

node2 = NULL

free(node2)

最典型的,就是task_struct中,进程的相互关系。

每个进程都有自己的task_struct,同胞进程之间task_struct就是用双向链表连接起来的。

去查下内核编程指南,里面有说到


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7290650.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-03
下一篇 2023-04-03

发表评论

登录后才能评论

评论列表(0条)

保存