美文网首页
union联合体

union联合体

作者: gzr | 来源:发表于2017-04-12 16:45 被阅读0次

    之前工作中,很少用到union结构。最近翻看引擎代码,发现有很多结构体的定义中会出现union,就了解了下。

    首先,union是个结构
    其次,union的所有成员首地址,相对于基址,偏移量都是0
    而且,union的内存分配很有意思,能够容纳成员中最宽的那个即可。但这不代表union的大小,就是最大的那个成员。
    因为union结构的对齐方式,需要适合所有成员类型。

    其实想想,union还是很有用的,既不占用多余内存空间,又能使用不同数据类型。使得业务代码更清晰易读。

    最常用的应用场景,嵌入式编程,用于分离高低字节的数据。

    int n; //嵌入式环境下,int型占2个字节
    
    //分离高低位
    int nHigh = n / 256;
    int nLow = n % 256;
    
    /*
      对于频繁分离高低位的业务场景而言,上面的操作可以用union优化
    */
    union _u{
      int n;
      char c[2];
    }u;
    u.n = n;
    nHigh = u.c[0];
    nLow = u.c[1];
    

    相关文章

      网友评论

          本文标题:union联合体

          本文链接:https://www.haomeiwen.com/subject/lcmmattx.html