关于linux内核链表写法问题

Unixb 2015-12-11 09:53:31
linux数据包含链表的写法是这样 但是有一点 不明白


struct list_head {
struct list_head *next, *prev;
};

1 typedef struct application_info
2 {
3 uint32_t app_id;
4 uint32_t up_flow;
5 uint32_t down_flow;
6 struct list_head app_info_head; //这里为什么不用 指针 而是用一个结构体? 不直接struct list_head *app_info_head
7 }app_info;



...全文
132 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Unixb 2015-12-12
  • 打赏
  • 举报
回复
引用 5 楼 chj4129 的回复:
1.这里就是一个量表的头,占用2个指针的内存,如果用struct list_head *app_info_head的话,还需要为app_info_head去kmalloc内存,一般人不会这么写代码的。 2.如果是hash表的表头,就有可能使用指针。
非常感谢 想明白了 如果是指针 这里只不过是分配一个指针变量 没有任何的内存空间 就需要malloc内存然后挂载上去才行! 所以用结构体方法!
Unixb 2015-12-11
  • 打赏
  • 举报
回复
老师 您直接告诉我 不就得了么
赵4老师 2015-12-11
  • 打赏
  • 举报
回复
网上搜,有理由的。
云霏阳 2015-12-11
  • 打赏
  • 举报
回复
1.这里就是一个量表的头,占用2个指针的内存,如果用struct list_head *app_info_head的话,还需要为app_info_head去kmalloc内存,一般人不会这么写代码的。 2.如果是hash表的表头,就有可能使用指针。
赵4老师 2015-12-11
  • 打赏
  • 举报
回复
引用 2 楼 Unixb 的回复:
老师 您直接告诉我 不就得了么
问题是我也忘了。 http://www.cnblogs.com/Daniel-G/archive/2013/09/06/3305834.html http://www.cnblogs.com/Anker/archive/2013/12/15/3475643.html
一根烂笔头 2015-12-11
  • 打赏
  • 举报
回复
container_of()的存在,让它成为可能 1. 每个需要链入的结构实例中都嵌入list_head实例 2. 通过嵌入list_head实例相互链接起来,而不关心具体的“箱子”结构体是什么,实现了任何类型都能链接起来的通用 3. 通过指定的结构类型,和链表指针,使用container_of()宏反推结构体的基址 打个比方:货运火车见过吧?这个list_head就像货运火车,不同的结构体实例就是火车上的货物,第一节是油罐,第二节是木材,第三节是坦克。container_of()通过链接指针和货物类型,就能获得它的实例基址。

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧