container_of原理
时间: 2023-11-20 17:06:03 浏览: 96
container_of宏的原理是通过已知结构体成员变量的地址,来获取整个结构体的首地址。它是在Linux内核中定义的宏,实现方式如下:
1. 首先,使用offsetof宏来计算出成员变量相对于结构体首地址的偏移量。
```
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
```
2. 接下来,使用typeof来获取成员变量的类型,然后定义一个临时指针__mptr,并将传入的成员变量的地址赋值给它。
```
const typeof(((type *)0)->member) *__mptr = (ptr);
```
3. 最后,通过将__mptr指针减去偏移量的方式,得到整个结构体的首地址,并将其强制转换为指向结构体类型的指针。
```
(type *)((char *)__mptr - offsetof(type, member));
```
这样,container_of宏就可以根据已知的成员变量地址,推算出整个结构体的首地址。从而可以直接访问结构体的其他成员。
引用可以更详细地了解container_of宏的使用示例。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* *3* [Linux 内核 container_of 宏详解](https://blog.csdn.net/m0_37383484/article/details/129244244)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]
阅读全文