zoukankan      html  css  js  c++  java
  • 关于c语言中的结构体使用偏移量求值问题

    最近在看nginx源码,看到定时器的时候,发现一个结构体利用偏移量求值问题,

    结构体相信做c开发的都遇到过,那么不知你对结构体中成员变量偏移这块是如何理解的;

    首先我们先看一下nginx中的那个让我迷惑的地方

    ev =    (event_t*)((char*)node - offsetof(event_t, timer));

    这里,可以得知道是利用event_t结构体的timer变量,来反求event_t结构体的地址

    说明一下:

      event_t是一个结构体

      node 也是一个结构体

      timer 也是一个结构体,并且timer存在于event_t结构体内

    如下:

      struct event_t{

        ...

        struct node timer;

        ...

      }

     这里,先是得到一个node,即struct node的一个对像,这个node就存在于event_t中

     然后看下offsetof()这个函数, 这个函数的作用为取得变量在结构体中的偏移值;

    struct node_t{
        char a;
        int b;
        int c;
    };

    offsetof(struct node_t, c);这个就可以得到c在结构体struct node_t中的偏移值
    同理:由于node已经获取取了。而timer也即node节点在event_t中的位置即为
    offsetof(event_t, timer),而node在内存中的地址就可以通过timer的偏移量获取,

    node - offsetof(event_t, timer),这样就得到了event的首地址,当然也就是要使用的event首地址。
  • 相关阅读:
    设计模式
    刷新所有视图存储过程
    js杨辉三角控制台输出
    2018申请淘宝客AppKey
    w3c标准 dom对象 事件冒泡和事件捕获
    promise原理
    vue virtual Dom
    css学习
    seo优化
    新概念学习
  • 原文地址:https://www.cnblogs.com/yxc6123/p/3818245.html
Copyright © 2011-2022 走看看