美文网首页IOS开发知识点
iOS开发 内存对齐原理

iOS开发 内存对齐原理

作者: 魔杰西 | 来源:发表于2020-09-08 16:30 被阅读0次

1.文字描述

  • 数据成员对⻬规则:结构(struct)(或联合(union))的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置要从该成员大小或者成员的子成员大小(只要该成员有子成员,比如说是数组,结构体等)的整数倍开始(比如int为4字节,则要从4的整数倍地址开始存储。
  • 结构体作为成员:如果一个结构里有某些结构体成员,则结构体成员要从其内部最大元素大小的整数倍地址开始存储(struct a里存有struct b,b里有char,int ,double等元素,那b应该从8的整数倍开始存储)。
  • 收尾工作:结构体的总大小,也就是sizeof的结果,必须是其内部最大成员的整数倍,不足的要补⻬。

2.案例实践

实践之前,我们先从一张图了解各数据类型所占字节数:


图片.png

案例:

struct LGStruct1 {
    double a;    //  8 [0-7] 
    char b;      //  1  [8 1] (8)
    int c;       //  4  [9 4] 9 10 11 (12 13 14 15)
    short d;     //  2  [16 2] (16 17)
}struct1;

分析:
a占8个字节,b占一个字节,c占4个字节,d占2个字节;
根据内存对齐原理,struct1要从字节最大的8开始存起,即a占0~7;
当存储b的时候,存储起始位置8是1的整数倍,所以存储一个字节,即b占8;
当存储c的时候,存储起始位置9不是4的整数倍,则向后寻找最近的4的整数倍,即c占12~15;
当存储d的时候,存储起始位置16是2的整数倍,则存储两个字节,即c占16~17;
这样struct1总共的存储大小便是0~17,即内存大小为18;
再根据上面对齐原理最后一条,结构体的总大小是其内部最大成员的整数倍,而struct1内部最大成员是a,即8的整数倍,即为18后面的24,所以struct1总大小为24。

3.内存对齐原理的意义

利用空间换时间,提高读取效率

相关文章

  • iOS内存对齐

    这篇文章我们来探索一下iOS内存对齐的原理,在探索完内存对齐原理之后,你就会明白内存对齐的好处。 在讲述内存对齐时...

  • iOS开发 内存对齐原理

    1.文字描述 数据成员对⻬规则:结构(struct)(或联合(union))的数据成员,第一个数据成员放在offs...

  • iOS-底层原理 05:内存对齐原理

    iOS 底层原理 文章汇总 在探讨内存对齐原理之前,首先介绍下iOS中获取内存大小的三种方式 获取内存大小的三种方...

  • iOS 内存对齐原理

    计算机中内存空间是按照 byte 划分的,计算机系统对基本类型数据在内存中存放的位置有限制,它们会要求这些数据的首...

  • iOS 内存对齐原理

    获取内存大小 第一种:sizeof The sizeof keyword gives the amount of ...

  • OC对象内存占用及优化

    结构体内存对齐原理 前言:我们都知道,在iOS开发中,我们写的oc代码,底层都是用c++来实现的,而oc对象本质就...

  • ios底层原理 :内存对齐原理

    先介绍一下ios获取内存的三种方式 获取内存大小的三种方式 sizeof class_getInstanceSiz...

  • iOS底层原理--内存对齐

    在iOS底层原理--alloc&init&new这篇文章中,我们认识到了字节对齐。那么,我们回顾一下什么是字节对齐...

  • iOS底层-内存对齐原理

    前言 在研究内存字节对齐之前,先通过两个简单的案例了解一下内存大小占用情况: 新建一个工程,创建一个对象:ZLOb...

  • iOS底层探究 - 内存对齐

    目录1:内存对齐的原因2:内存对齐的规则3:结构体内存分配演练以及在iOS中对象成员的内存分配探索 一 :内存对齐...

网友评论

    本文标题:iOS开发 内存对齐原理

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