美文网首页
联合体和位域

联合体和位域

作者: Eli_app | 来源:发表于2021-06-11 10:09 被阅读0次

联合体和位域

在上一篇iOS中关于内存对齐的探究中,我们探索了结构体内存对齐的情况,这部分继续探索一下位域和联合体union

位域

我们先来看位域,在结构体中

struct Car1 {

  BOOL front;  //1

  BOOL back ;  //1

  BOOL left ;  //1

  BOOL right;  //1       //4字节

}car1;

这样一个结构体所占空间是4字节。我们在想一个布尔值在二进制中,用0或1一位就能表示,那这样将大大节约了内存空间。由此我们引出了位域

struct Car1 {

  BOOL front: 1;

  BOOL back : 1;

  BOOL left : 1;

  BOOL right: 1;         //不超过8位,只占用1个字节。

}car1;

这样的结构体,所占内存空间只有1个字节了。当然我们也可以在后面自定义所占空间,也可以占用更多的空间。

联合体

我们先定义如下联合体

union un2{

  double a;   //8

  int    b;   //4

  char   c;   //1

  char   d;   //1

};

我们先打印一下sizeof()

2021-06-11 09:45:53.206451+0800 KCObjcBuild[87220:3314559] sizeof = 8

我们把联合体的内容再改变一下,这次去掉8字节的double类型

union un2{

  int  b;   //4

  char  c;   //1

  char  d;   //2

};

再来打印一下sizeof()

2021-06-11 09:48:49.336502+0800 KCObjcBuild[87246:3316473]sizeof = 4

说明他里面只保留一个最大成员的内存地址,来存储数据。并没有开辟多个内存地址,来存储所有的数据。我们可以给联合体赋值,看看会打印什么

    union un2 persion ;

    persion.c = 'o';

    persion.b = 4;

    persion.a = 10.00;

打印结果如下:

(un2) persion = (a = 10, b = 0, c = '\0', d = '\0')

测试结果表明,他只存储了我们最后赋值的值,和我们打印他的内存大小结果相印证。其他的赋值结果都被丢弃了。

相关文章

  • Runtime源码剖析-对象

    Runtime源码剖析-对象 预备知识 如果大家对联合体、位域相关知识不够熟悉的话,请参考联合体+位域[https...

  • 联合体和位域

    联合体和位域 在上一篇iOS中关于内存对齐的探究[https://www.jianshu.com/p/c913b5...

  • 联合体&位域

    首先我们创建一个类,里面有三个BOOL类型属性 创建一个对象,打印内存大小 打印出来占16字节(isa:8,tal...

  • 隐藏在 OC 中的那些暗招 &位域&联合体&am

    如果没有听说过 isa_t,只是听说过 isa 指针,那么这篇简书值得一看。 一、位域与联合体 1.1 位域 位域...

  • 联合体与位域

    在对 OC 对象创建的探究过程中,我们发现一个很有趣的实现 isa。isa 是将对象内存空间与 class 之间联...

  • iOS联合体、位域

    从 isa 底层结构引入联合体、位域 在isa底层结构分析[https://www.jianshu.com/p/3...

  • 联合体与位域

    联合体 定义 联合体也叫共用体,由不同的数据类型组成,其变量互斥,存储方式是所有成员共用一个段内存,共同体同一时刻...

  • iOS大师班笔记

    四、类的本质 联合体的互斥 isa的结构为联合体+位域的结构,以达到直接操作二进制位的目的,节约了内存。如果使用属...

  • 三 isa结构分析

    联合体和位域 位域:是指信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。例如在存放一个开关...

  • 结构体 联合体 位域

    union 共用体/联合体 结构体和共用体的区别在于:结构体的各个成员会占用不同的内存,互相之间没有影响;而共用体...

网友评论

      本文标题:联合体和位域

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