Linux内核的container_of宏

发布时间 2023-07-07 10:37:47作者: 成蹊0xc000

简介

container_of宏是内核的常用宏, 通常用于通过结构体成员指针来获取结构体指针. 该宏依赖的一个基本原则是结构体在虚拟内存中是连续存储的. 还有铭记就是它是一个编译期就已经计算好的宏.

为什么要有container_of

根据内核考古学, container_of首次出现在Linux 2.5.28版本, 是由Neil Brown提交, 根据提交记录看container_of宏是为了替换list_entry宏, 其中加入了一些类型安全检查.

image

image

使用

1.实践中container_of扮演起了联系不同结构体的角色, 如下图所示 ib_qp_init_attr类型变量引用了bnxt_re_cq类型变量中的一个成员ib_cq, 通过container_of我们可以间接的通过指针send_cq去找到包含了它的结构体变量指针.
image

image

2.当做获取成员所在结构体变量的工具
image

原理

image

image

image

参考

  1. https://zhuanlan.zhihu.com/p/54932270

  2. https://stackoverflow.com/questions/62725312/use-of-char-over-void-in-pointer-arithmetic