list_entry的实现
来源:互联网 发布:华硕fl5600l怎么优化 编辑:程序博客网 时间:2024/06/06 08:56
linux/list.h
#define list_entry(ptr, type, member) \
container_of(ptr, type, member)
#define container_of(ptr, type, member) ({\
const typeof( ((type *)0)->member ) *__mptr = (ptr);\
(type *)( (char *)__mptr - offsetof(type,member) );})
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
1.先看&((type *)0)->member:
把“0”强制转化为指针类型,则该指针一定指向“0”(数据段基址)。因为指针是“type *”型的,所以可取到以“0”为基地址的一个type型变量member域的地址。那么这个地址也就等于member域到结构体基地址的偏移字节数。
而offsetof宏,就是使用这个原理获得member位于type的偏移量
2.container_of中 使用ptr的地址减去ptr在type中的偏移量,就获得了type的地址,转换为type指针
- list_entry的实现
- containof和list_entry的实现方式
- 内核双链表 list_entry实现
- list_entry的宏定义
- list_entry的使用说明
- list_entry
- list_entry
- list_entry
- list_entry
- list_entry
- LIST_ENTRY
- list_entry()
- list_entry()
- list_entry
- list_entry()
- list_entry()
- DDK 中LIST_ENTRY的用法
- DDK 中LIST_ENTRY的用法
- USACO 1.1.1 Your Ride Is Here
- 速达软件|无法打开帐套数据库|一般性网络错误
- VC文件读写操作总结
- 使用ETHEREAL学习TCP/IP协议
- Latex插入图形
- list_entry的实现
- 嫣然一笑苦了情
- 3B大战引来的担忧:百度重仓云计算拟摆脱困局
- iPhone 开发过程中的一些小技术的总结
- 导入的ANDROID 项目没有ANDROID的JAR包
- pdo fetch模式
- 借我一生
- vim全局替换命令及正则表达式
- 关于栈、堆、静态存储区最大可分配大小的探讨