zoukankan      html  css  js  c++  java
  • Linux内核container_of 宏

     linux kernel 内核中常常可以看到container_of 的身影,在这里分析一下,加深印象

     首先看定义

      

      作用: 简而言之就是通过结构体成员指针找到指向结构体指针

      整个宏定义分为两个部分

        第一部分

        

        这句话的意思其实就是 定义一个中间变量__mptr,赋值为ptr,也就是指向成员的指针.

        第二部分

        

        首先来看一下offsetof定义

        

        这是一个依赖于编译器的宏,他的意思是 获得结构体成员在结构体内的偏移地址.

        这个宏有点巧妙,编译器认为0是一个有效的地址,从而认为0是type指针的起始地址,这样就可以变相取得的成员指针的偏移位置,如下图

        

        明白了offsetof 宏,上面第二部分就比较简单了,实际上就是 成员指针 减去 成员在结构体的偏移位置 获得指向结构体的指针

        可能大家看了上面还有很多疑惑,下面举个例子来描述一下就明白了

        

        代码见https://github.com/songbingyu/Linux/blob/master/sample/OffsetTest.c

        编译运行结果如下

        

       如果还是没有看明白,请及时联系我哈哈

      

  • 相关阅读:
    百度地图api
    白岩松视频
    rails3 unicorn部署
    rails3 unicorn部署
    rails3 unicorn部署
    nginx geoip 模块实现地区性负载均衡
    workingwithrails
    rails部署方案
    rails3使用cucumber和rspec进行测试
    rails3 unicorn部署
  • 原文地址:https://www.cnblogs.com/songbingyu/p/3684911.html
Copyright © 2011-2022 走看看