美文网首页iOS开发之底层
iOS底层知识之数据结构union

iOS底层知识之数据结构union

作者: Hello_kid | 来源:发表于2020-10-27 17:35 被阅读0次

    union 共用体, 也叫联合体,c/c++中另一种自定义的数据类型;

    1. 联合就是一个结构;
    2. 所有成员相对基地址的偏移量为0;
    3. 此结构最大空间要足够容纳最宽的成员;
    4. 对齐方式要适合联合中所有的成员;

    声明方式

    union student {
        int a;
        short b;
        char c;
    };
    

    和之前介绍过的结构体 有一样的声明语法。只是关键字不同而已。 也可以使用匿名union


    union DATE {
        int a;
        short b;
        char c;
    };
    NSLog(@"%lu", sizeof(union DATE)); // 输出4个字节
    

    union DATE 联合体最宽字段是 int a, 所以最大的内存容量是4;


    union DATE {
         char c[9];
          int i;
        double d;
    };
    NSLog(@"%lu", sizeof(union DATE)); // 输出16个字节
    

    这个片段代码,输出大小16, 因为, 这个联合体最大的字段是数组c9个字节,所以最大分配9,并且与最宽的字段 double d的大小8 整除,因为9不能整除,所以提升到16


    union DATE {
         char c[5];
          int i;
    };
    NSLog(@"%lu", sizeof(union DATE)); // 输出8个字节
    

    这个案例如上, 最大分配5个字节, 再看一下能否对齐另一个字段int i,所以得出大小为8;

    参考链接 & 拓展

    正数和负数在内存存储方式

    相关文章

      网友评论

        本文标题:iOS底层知识之数据结构union

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