Linux内核list_head内存使用情况

时间:2017-05-12 07:38:19

标签: data-structures linux-kernel

我试图使用Linux内核推荐的列表实用程序。 从https://isis.poly.edu/kulesh/stuff/src/klist/中的介绍中,list_head的一个特性是该元素可以属于不同的列表。

现在,如果我想要所有员工的清单和旧员工的清单,我想我必须定义以下数据和结构:

struct list_head all_staff;
struct list_head old_staff;

struct staff {
    int age;
    struct list_head list;    // for all the staff;
    struct list_head old;
};

另一方面,正常列表实现可能是这样的:

struct staff {
    int age;
};

struct node {
    struct node *prev;
    struct node *next;
    void *element;
};

list_head与普通列表实现相比的优势是什么?我觉得虽然list_head只包含2个点,但是删除了元素的点,因此它节省了内存,但在这种情况下,我必须在人员结构中添加另一个list_head,如果只有1个老员工,那么它将浪费了很多记忆。

更重要的是,如果员工属于许多不同的群体,是否意味着我必须在员工结构中添加许多list_head?

感谢。

1 个答案:

答案 0 :(得分:1)

  

如果员工属于许多不同的群体,这是否意味着我必须添加许多   list_head在员工结构中?

是的,list_head对象中需要多个stuff字段,因此它可以同时属于多个列表。

  

list_head与普通列表实现相比的优势是什么?

list_head现成的实施。但是当使用"正常"列表,您需要为用作列表元素的每个对象类型手动实现列表函数。