• 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'的真正绝对地址。






  • 相关阅读:
    Node入门--事件模块
    Node入门--1--module&require
    Node入门--1-->Hello World
    文件上传(StringMVC)
    StringMVC
    Spring基础
    手动添加日期到mysql数据库
    aspectj 注解
    HandlerMapping执行过程。。。
    在考试我打
  • 原文地址:https://www.cnblogs.com/bugY/p/2219893.html
Copyright © 2020-2023  润新知