美文网首页
扩展1—iOS的16字节对齐

扩展1—iOS的16字节对齐

作者: L_Ares | 来源:发表于2020-10-18 23:41 被阅读0次

本文为L_Ares个人写作,包括图片皆为个人亲自操作,以任何形式转载请表明原文出处。

首先,明确一点,这是iOS的实例对齐的官方要求。

  1. 那什么是实例对齐?

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

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

以空间换取时间。

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

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

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

1.0.png

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

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

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

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

相关文章

  • 扩展1—iOS的16字节对齐

    本文为L_Ares个人写作,包括图片皆为个人亲自操作,以任何形式转载请表明原文出处。 首先,明确一点,这是iOS的...

  • 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岗面试都会问个内存对齐问题,那么什么是字节对齐?成员变量对齐和对象内存对齐有什么区别?今天我来为...

  • C++:alignas关键字的作用

    0.绪 alignas关键字用来设置内存中对齐方式,最小是8字节对齐,可以是16,32,64,128等。 1.代码...

  • golang内存对齐

    1.golang内存对齐保证 typealign 保证bool,type,uint8,int81个字节uint16...

  • iOS 内存字节对齐

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

网友评论

      本文标题:扩展1—iOS的16字节对齐

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