链表的节点应存储谁的地址:其他节点,或将节点作为字段的数据结构?

时间:2018-09-17 01:00:15

标签: data-structures linked-list linux-kernel

通过了解Linux内核:

  

Linux内核定义了list_head数据结构,仅   next和prev字段表示a的前向指针和后向指针   通用双链表元素。重要的是要   但是请注意,list_head字段中的指针存储了   其他list_head字段的地址,而不是   包含list_head结构的整个数据结构;   参见图3-3(a)。

enter image description here

为什么list_head字段中的指针存储其他list_head字段的地址,而不是其中包括list_head结构的整个数据结构的地址

给出一个指向df['Net Volume'].rolling(window=range_window).apply( lambda x: np.max(x * np.blackman(range_window)), raw=True ) 对象的指针,如何获取包含list_head对象的数据结构(例如“数据结构1”)的对象? 例如,How can I get the process descriptor from a PID in Linux kernel?

如果使用的是OO语言,则list_head字段是否在包含list_head结构的数据结构中是私有的?那么,与其他list_head字段的地址相比,list_head字段中的指针存储包含该list_head结构的整个数据结构的地址更合理吗?< / p>

谢谢。

2 个答案:

答案 0 :(得分:1)

list_head存储指向下一个/上一个列表节点的指针。 可以将一个数据结构放在一个以上的列表中,并在其中使用多个list_head元素。 处理代码“知道”这些元素中的哪些元素放入给定列表中,并可以使用list_entry从指向节点的指针恢复指向数据结构的指针。

答案 1 :(得分:1)

  

为什么list_head字段中的指针存储其他地址   list_head字段而不是整个数据的地址   包含list_head结构的结构?

因为从逻辑上讲它是正确的,并且易于实现。您不需要知道用于迭代列表的类型。同样,列表头未嵌入任何结构中。列表为空时应该指向什么?

  

给出一个指向list_head对象的指针,我该如何获取   数据结构(例如“数据结构1”)包含   list_head对象?

使用container_of宏。