美文网首页
OC内存对其规则详解

OC内存对其规则详解

作者: 你duck不必呀 | 来源:发表于2019-12-25 13:07 被阅读0次

这是一个简单的结构体

 struct{
        char a;
        double b;
        int c;
        short d;
    }struct1;

NSLog(@"%lu",sizeof(struct1));

输出为:

24

先看一下对其规则

1.数据成员对⻬规则:结构(struct)(或联合(union))的数据成员,第
一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置要从该成员大小的整数倍开始储。

区分有没有子成员的情况

没有子成员:

//从0开始第一个位置
struct memberOne{
                char a;    [0]  //1 第一个元素在offset为0的位置
                double b;  [8,15]  //char先补足到8,从8的位置开始放
                int c;     [16,19]//16正好是4的倍数,直接放
                short d;   [20,21] //20正好是2的倍数,直接放
               };          [23]//整体必须是最大子成员8的倍数,需要补到23

图解:


截屏.png

2.如果一个结构里有某些结构体成员,则结构体成员要从
其内部最大元素大小的整数倍地址开始存储.(struct a里存有struct b,b
里有char,int ,double等元素,那b应该从8的整数倍开始存储.)

有子成员

struct memberTwo{
               char a;     //1
               double b;   //8
               int c;      //4
               short d;    //2
              };           //24
       
       struct memberOne{
               char a;     //1
               double b;   //8
               int c;      //4
               short d;    //2
               struct memberTwo e;//24
       }member1;           //48

NSLog(@"%lu",sizeof(member1));

输出:

48

图解:


截屏.png

因为多了一个memberTwo, memberTwo成员中的最大子成员是double size=8,所以要满足8的倍数
3.结构体的总大小,也就是sizeof的结果,.必须是其内部最大成员(如果有子成员,参考规则2)的整数倍.不足的要补⻬对齐

  • 在iOS下是结构体是8字节对齐
  • OC对象申请的内存是8字节对齐,但是系统开辟的内存空间是16字节对齐,

相关文章

  • OC内存对其规则详解

    这是一个简单的结构体 输出为: 先看一下对其规则 1.数据成员对⻬规则:结构(struct)(或联合(union)...

  • OC 内存对其原理分析

    上一篇文章我们讲到 alloc 在开辟内存空间之前,对对要分配的内存空间提前进行计算,并最终使用 16 字节对其方...

  • OC的内存管理

    1、OC的内存管理 OC是通过引用计数进行内存管理的,其核心思想遵循“谁创建谁释放;谁引用谁管理”。 OC的内存管...

  • C语言中内存对其规则

    C语言中结构体内存对齐规则 对齐规则: 内存偏移为该数据类型的最小整数倍 总体占用内存为结构体中最大数据类型的整数...

  • OC内存管理详解

    ARC 一、简介 在Objective-C中采用Automatic Reference Counting (ARC...

  • OC底层原理汇总

    OC底层原理(一).alloc实际调用流程分析OC底层原理(二).内存分配与内存对齐OC底层原理(三)、isa、对...

  • 2018-10-10 野指针和空指针

    野指针访问不可用内存地址 该内存已被收回 不在属于该应用空指针 指向null 关于OC中的nil, NULL详解...

  • iOS-《编写高质量代码》笔记 第三章-内存管理

    建议17:理解内存和Objective-C内存管理规则 OC 内存管理模式基于对象的“所有权”上。任何对象都会被一...

  • 内存管理

    一.内存基本介绍 1、OC内存管理的基本概念 2、OC内存管理的范围​管理范围:管理任何继承自NSObject的对...

  • iOS - 内存对齐分析

    iOS 内存对其原则 数据成员对⻬规则:结构(struct)(或联合(union))的数据成员,第⼀个数据成员放在...

网友评论

      本文标题:OC内存对其规则详解

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