- 主题:Linus说这样写是不懂指针。看看你懂指针不
不懂指针的写法:
if (prev)
prev->next = entry->next;
else
list_head = entry->next;
懂指针的写法:
*pp = entry->next
https://grisha.org/blog/2013/04/02/linus-on-understanding-pointers/
--
FROM 125.35.123.*
实际上只有list_entry这种几乎是kernel专用的链表能那么写,因为多搞了一个专门的head节点。
普通链表一般不会多搞一个节点,从而可能是全空的。
也就是说,是一个写惯了普通链表的人在kernel中写的那段被Linus批的代码。
【 在 liuxueshen 的大作中提到: 】
: 要我还是喜欢前者,省脑子。
: 尤其是遇到007时刻。
:
--
修改:z16166 FROM 125.35.123.*
FROM 125.35.123.*
除了head节点,都是需要free的
man7.org/linux/man-pages/man3/list.3.html
MS也在kernel里搞这种,略有差异
【 在 DoorWay 的大作中提到: 】
: 想了一会,明白了。
: 想起来上一次看这帖时,讨论区里问没free?这里需要free吗,没弄懂。
--
FROM 103.169.216.*
除了head节点,都是需要free的
https://man7.org/linux/man-pages/man3/list.3.html
MS也在kernel里搞这种,不过有点差异
https://docs.microsoft.com/en-us/windows/win32/api/ntdef/ns-ntdef-list_entry
https://docs.microsoft.com/en-us/windows/win32/api/ntdef/ns-ntdef-single_list_entry
【 在 DoorWay 的大作中提到: 】
: 想了一会,明白了。
: 想起来上一次看这帖时,讨论区里问没free?这里需要free吗,没弄懂。
--
FROM 103.169.216.*
哦,谢谢指出。那就区分为使用了dummy node技巧、没使用dummy node技巧的链表
list_entry的head节点就是dummy node
【 在 allegro 的大作中提到: 】
: NO
: 实际上刷过题的都知道,list相关问题首先声明个栈上的dummy node,能简化各种插入删除操作代码。
:
--
修改:z16166 FROM 125.35.123.*
FROM 125.35.123.*