iOS的16字节对齐

作者: 比特_0bd7 | 来源:发表于2021-01-06 15:09 被阅读0次
  1. 那什么是实例对齐?

简单的说就是在开辟一块内存空间的时候,只能开辟16的整数倍字节大小的内存空间。这样以16位为单位长度开辟空间,就可以保证内存的连续性上的整齐度。

  1. 为什么要16字节对齐?

以空间换取时间。

大家都知道字节是内存的容量单位,1内存你也可以叫它1字节。但是,CPU在读取内存的时候,却不是以字节为单位来读取的,而是以“块”为单位读取的,所以大家也经常听到一块内存,“块”的大小也就是内存存取的力度。

如果不对齐的话,在我们频繁的存取内存的时候,CPU就需要花费大量的精力去分辨你要读取多少字节,这就会造成CPU的效率低下,如果想要CPU又有效又不减少存取次数的话,那就需要找一个规范,这个规范就是字节对齐。

苹果采取16字节对齐,是因为OC的对象中,第一位叫isa指针,它是必然存在的,而且它就占了8位字节,就算你的对象中没有其他的属性了,也一定有一个isa,那对象就至少要占用8位字节。如果以8位字节对齐的话,如果连续的两块内存都是没有属性的对象,那么它们的内存空间就会完全的挨在一起,是容易混乱的。

image

以16字节为一块,这就保证了CPU在读取的时候,按照块读取就可以,效率更高,同时还不容易混乱。

(3). 看一下苹果源码中的16字节对齐的算法

static inline size_t align16(size_t x) {
    return (x + size_t(15)) & ~size_t(15);
}

直接用了位运算,也是位了提高效率。

作者:L_Ares
链接:https://www.jianshu.com/p/e01fffd22091
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

相关文章

  • iOS 字节对齐

    前言:在上一篇文章中,我们了解到,OC 底层的alloc 到底做了哪些事情。总结起来就是: 1、计算内存大小 2、...

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

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

  • iOS的16字节对齐

    那什么是实例对齐? 简单的说就是在开辟一块内存空间的时候,只能开辟16的整数倍字节大小的内存空间。这样以16位为单...

  • iOS内存对齐浅识

    在alloc的运行流程中我们提到了关于iOS16字节对齐的作用,那么在这篇文章中我们讨论一下,关于内存对齐的一些具...

  • OC 对象的底层本质2

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

  • iOS底层之内存对齐算法解析

    目前但凡一个iOS岗面试都会问个内存对齐问题,那么什么是字节对齐?成员变量对齐和对象内存对齐有什么区别?今天我来为...

  • iOS 内存字节对齐

    通过一段代码来描述内存对齐的现象。 上述代码打印出来的结果为:24,16 为什么相同的结构体,只是交换了变量 ab...

  • iOS 内存字节对齐

    一、代码 Demo 可以看到 Struct1、Struct2、Struct3 的成员变量的数据类型都是相同的,仅仅...

  • 字节对齐与大端小端与内存区域划分

    字节对齐 C语言字节对齐C语言字节对齐/7213465 大端小端 字节序(大小端)详解从高低地址和高低位开始理解(...

  • iOS中的字节对齐

    字节对齐的原则:数据成员对⻬规则:结构(struct)(或联合(union))的数据成员,第一个数据成员放在off...

网友评论

    本文标题:iOS的16字节对齐

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