美文网首页
扩展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字节对齐

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