美文网首页
Tagged pointer 初识

Tagged pointer 初识

作者: 代码之道 | 来源:发表于2020-09-14 09:56 被阅读0次

    问题:对于NSNumber和NSDate一类的变量本身的值所需要的占用的内存大小常常不需要8字节。对于64位系统,NSNumber对象来说, NSNumber对象指针占8字节 + NSNumber对象的值和 isa占16字节 = 24字节 。

    实际需要占用24字节,这样内存造成了浪费,效率也不高。

    为了解决这个问题,苹果引入了tagged pointer对象,苹果将一个指针拆分成两部分,一部分直接保存数据,另一部分作为特殊标记,表示这是一个特别的指针,不指向任何地方。当8字节可以承载表示的数值时,系统就会以tagged pointer的方式生成指针,如果8字节承载不了,则用以前的方式生成普通指针。

    特点

    • tagged pointer 专门用来存储小的对象,例如NSNumber和NSDate。
    • tagged pointer 指针的值不再是一个地址了,而是真正的值。所以实际上它不再是一个对象,它的内存并不存储在堆中,也不需要malloc和free.
    • 并且不支持retain, release操作。
    • 在内存读取上有着以前3倍的效率,创建时比以前快106倍。

    因此,苹果引入了Tagged Pointer,不但减少了64位机器下的内存占用,还提高了运行效率,完美地解决了小内存对象在存储和访问效率的上的问题。

    相关文章

      网友评论

          本文标题:Tagged pointer 初识

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