[关闭]
@LIUHUAN 2019-03-11T22:32:20.000000Z 字数 766 阅读 769

linux链表实现原理

linux


数据结构定义

  1. struct list_head {
  2. struct list_head *next, *prev;
  3. };
  1. typedef struct Data{
  2. int n;
  3. // other data
  4. struct list_head list;
  5. }Data;
  6. Data d;
  7. struct list_head l = list_entry(&d,Data,list);

操作函数

  1. #define list_entry(ptr, type, member) \
  2. container_of(ptr, type, member)
  3. #define container_of(ptr, type, member) ({ \
  4. const typeof( ((type *)0)->member ) *__mptr = (ptr); \
  5. (type *)( (char *)__mptr - offsetof(type,member) );})
  1. #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
  1. --------------------- // 地址空间
  2. | <-offset -> |
  3. 地址0 member地址
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注