Linux内核实现List二个关键的宏offsetof 和 container_of
来源:互联网 发布:lcdp0端口定义 编辑:程序博客网 时间:2024/04/29 20:53
二个宏定义在inux/kernel.h头文件
1.offsetof
offsetof宏的定义如下:
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
关键之处在于将地址0强制转换为type类型的指针,从而定位到member在结构体中偏移位置。编译器认为0是一个有效的地址,从而认为0是type指针的起始地址。
2.container_of
container_of宏定义如下:
#define container_of(ptr, type, member) ({ \ const typeof( ((type *)0)->member ) *__mptr = (ptr); \ (type *)( (char *)__mptr - offsetof(type,member) );})
container_of宏分为两部分,
1.const typeof( ((type *)0)->member ) *__mptr = (ptr);
通过typeof定义一个member指针类型的指针变量__mptr,(即__mptr是指向member类型的指针),并将__mptr赋值为ptr,关键之处将_mptr转换为member类型的指针。
2: (type )( (char )__mptr - offsetof(type,member) ),通过offsetof宏计算出member在type中的偏移,然后用member的实际地址__mptr减去偏移,得到type的起始地址,即指向type类型的指针。
0 0
- Linux内核实现List二个关键的宏offsetof 和 container_of
- 对linux内核的container_of和offsetof宏的理解
- Linux内核 container_of 宏和 offsetof 宏分析
- Linux内核 container_of 宏和 offsetof 宏分析
- Linux内核 container_of 宏和 offsetof 宏分析
- Linux内核 container_of 宏和 offsetof 宏分析
- Linux内核 container_of 宏和 offsetof 宏分析
- linux 内核中container_of和offsetof宏定义解析
- Linux 内核中宏 offsetof 与 container_of 的含义
- offsetof和container_of两个内核中的宏
- 两个重要的宏 offsetof 和 container_of
- linux内核细节- typeof、offsetof、container_of
- offsetof宏和container_of宏
- container_of 和 offsetof 宏详解
- 关于Linux/kernel.h中的offsetof和container_of宏
- 内核:offsetof + container_of 分析
- offsetof(TYPE, MEMBER)宏和container_of(ptr, type, member)宏的实现
- C语言小结--offsetof和container_of宏的使用
- PHP-2-使用-测试PHP连接PostgreSQL
- EF Code First默认规则及配置
- 一个scrollView无法滚动的原因
- Leetcode[219]-Contains Duplicate II
- COM学习笔记4_创建COM组件的实现
- Linux内核实现List二个关键的宏offsetof 和 container_of
- BYTE record :1啥意思
- spring使用注解实现AOP
- hunnu11550[数学+搜索]欧拉函数
- UILabel 对文字设置多个颜色 画中线
- maven+springMVC+mybatis+junit详细搭建过程
- Unity协程(Coroutine)原理深入剖析
- 接上:TabHost与RadioGroup结合完成的菜单
- Spring常用注解,自动扫描bean