zoukankan      html  css  js  c++  java
  • Linux内核分析

    今天遇到了一个函数,是Linux内核中的一个函数

    list_entry(ptr,type,member); //意义为从一个结构的成员指针'ptr'找到其容器'type'的指针。

    list_entry的宏定义:
    #define list_entry(ptr, type, member) \ 
    ((type *)((char *)(ptr)-(unsigned long)(&((type *)0)->member))) 

     (type *)0是为了计算地址方便。意思是在0这个地址看做有一个虚拟的type类型的变量,那么取一个成员再取这个成员的地址,就是这个结构体 中这个成员的绝对地址,由于结构体在地址为0的地方,所以这个成员'member'在这个结构体中的相对位置也是这个值了。   然后再用这个'member'的绝对地址也就是参数'ptr'减去它的相对位置就得出了'member'所在结构也就是参数'type'的真正绝对地址。






  • 相关阅读:
    表格的增删改查
    选择省份时,自动显示对应省份的城市
    弹框提示用户输入
    dom
    css基础
    HTML基础
    B
    poj 1840 Eqs
    hdu 1166 敌兵布阵(线段树)
    poj 2586 Y2K Accounting Bug
  • 原文地址:https://www.cnblogs.com/bugY/p/2219893.html
Copyright © 2011-2022 走看看