zoukankan      html  css  js  c++  java
  • uion联合体占用的字节计算

    union overlay

    {
    char letter;
    int number;
    };
    union overlay ua;
    ANSI C下 这里的ua 占多少字节?怎么计算?

    联合体(union)
    当多个数据需要共享内存或者多个数据每次只取其一时,可以利用联合体(union);
    1)联合体是一个结构;

    2)它的所有成员相对于基地址的偏移量都为0;

    3)此结构空间要大到足够容纳最"宽"的成员;

    4)其对齐方式要适合其中所有的成员;

    下面举例说明:

    如联合体

    1 union U
    2 {
    3 char s[9];
    4 int n;
    5 double d;
    6 };

    s占9字节,n占4字节,d占8字节,因此其至少需9字节的空间。然而其实际大小并不是9,

    运算符sizeof测试其大小为16.这是因为这里存在字节对齐的问题,9既不能被4整除,

    也不能被8整除。因此补充字节到16,这样就符合所有成员的自身对齐了。

    从这里可以看出联合体所占的空间不仅取决于最宽成员,还跟所有成员有关系

    即其大小必须满足两个条件:

    1)大小足够容纳最宽的成员;

    2)大小能被其包含的所有基本数据类型的大小所整除。

  • 相关阅读:
    待你长发及腰
    《线段树》讲稿
    Codeforces #Round 376 F 题解
    包裹快递 题解
    Codeforces #Round 376 部分题解
    圆圈舞蹈 题解
    奶牛晒衣服 题解
    BZOJ 1034 题解
    BZOJ 1045 题解
    BZOJ 1054 题解
  • 原文地址:https://www.cnblogs.com/liangbo-1024/p/10950191.html
Copyright © 2011-2022 走看看