iOS开发之底层

iOS底层知识之数据结构union

2020-10-27  本文已影响0人  Hello_kid

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;

参考链接 & 拓展

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

上一篇 下一篇

猜你喜欢

热点阅读