nginx有关位域的使用

≯℡__Kan透↙ 提交于 2019-12-03 11:40:06

这里截取一段nginx里的结构体:

struct ngx_listening_s {
    unsigned            open:1;
    unsigned            remain:1;
    unsigned            ignore:1;

    unsigned            bound:1;       /* already bound */
    unsigned            inherited:1;   /* inherited from previous process */
    unsigned            nonblocking_accept:1;
    unsigned            listen:1;
};

这个玩意以前从来没用过,查了下资料原来叫位域,在上面的ngx_listening_s结构体中(没有截取完整),open,remain等字段后面的:1,指明了这些字段仅占一个字节中的一位,其类型为unsigned。

这么做的好处很显然,节省存储空间,分配的时候速度也会快一点,因为nginx一般都用的pool分配数据,自己计算地址啥的(当然如果不够分配了还是会用malloc)。

为啥要类型是unsigned的呢?很显然,如果是signed,那岂不是有负的情况了(其实有负也不会影响,因为大部分nginx判断语句是这样写的:if(ls->open))。

另外这些字段不能用&取地址。它们的访问与普通字段没什么太大区别。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!