美文网首页面试
iOS OC内存对齐

iOS OC内存对齐

作者: 龙子陵 | 来源:发表于2022-03-18 10:55 被阅读0次

今天群里有人面试碰到问oc内存对齐的,记录一波:

图一.png

图一这个结构体,占用4个字节

图二.png

而图二这个结构体呢?答案是:4+4+1+1 = 12个字节

为什么char明明是1个字节,这里却说是4呢?因为这个结构体里,最长字节是4字节,即int b,而根据内存对齐原则,char占一个字节,后面还剩3个字节,但是3个字节装不下int b,那么char后面接的3个字节就会成为内存碎片,即4个字节,int本身占4个字节,最后char c ,char d,明明是两个1字节,为什么最后还是12个字节呢?还是对齐原则,c+d为2字节,后面空出两个内存碎片,但是还是会占满4字节,所以最后,这个结构体占有的字节数量,是12字节。

图三.png
图三就显而易见了,圆圈即代表内存碎片,而内存之所以对齐,是为了寻址方便,快速寻址,同样一个结构体,如果字节不对齐 站12个字节,如果对齐占8个字节。
比如typedef struct demo{ char a; int b; char c; }demo 这个结构体占12字节,而typedef struct demo{ int b; char a; char c; }demo 这个结构体占8个字节。

那么在实际开发中,有哪些注意点呢?其实手机内存现在这么大,对于这几个字节也不需要在意,但是还是要保持一个良好的习惯,比如,写结构体的时候,占用字节最多的类型,写在前面,同时,如果项目对接了一些内存很小的硬件,比如蓝牙数据传输之类的,能优化还是要尽量优化。还有,结构体最小占用字节也是4个字节,并且一个结构体占的内存数一定是4的倍数哟,即使里面只有一个char.

相关文章

  • iOS OC内存对齐

    今天群里有人面试碰到问oc内存对齐的,记录一波: 图一这个结构体,占用4个字节 而图二这个结构体呢?答案是:4+4...

  • 内存对齐

    知识点概要 OC对象内存对齐结构体内存对齐 OC对象内存对齐 计算内存大小的三种方式 1.sizeof:系统提供的...

  • iOS之内存对齐

    关于iOS的内存对齐,首先我们思考一个问题,iOS的对象实例在内存中是如何分布的?带着这个问题我们往下看。 OC对...

  • OC 对象的底层本质2

    因为内存对齐原则 ,内存大小必然是 8的倍数 所以是24个字节 iOS 分配OC对象内存都是16的倍数 所以mal...

  • iOS OC 对象的内存对齐原则

    iOS OC 对象的内存对齐原则 1.问题的引入 初始化一个OC类,具有如下属性: 初始化对象,并获取对象的内存s...

  • OC对象内存占用及优化

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

  • OC底层 -从类的对象内存排列看内存对齐

    写在开头 缘于上篇文章OC底层-对象的alloc流程探究,在联想的时候想到了内存对齐,又查看了很多关于OC内存对齐...

  • OC底层原理汇总

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

  • iOS内存对齐

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

  • iOS底层探究 - 内存对齐

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

网友评论

    本文标题:iOS OC内存对齐

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