Tagged Pointer简介

2020-03-12  本文已影响0人  Arthur澪

前言

从一句代码说起:NSNumber *num = @(20);只需要存储20这个数据。

按正常的技术方案,在64位CPU下,应该先去创建NSNumber对象,其值是20,然后再有个指向该地址的指针num。 虽然没有什么问题,但是造成了浪费。

Tagged Pointer技术

为了解决这个问题,苹果提出了Tagged Pointer的概念。

从64bit开始,iOS引入了Tagged Pointer技术,用于优化NSNumber、NSDate、NSString等小对象的存储。引入后,相关逻辑能减少一半的内存占用,以及 3 倍的访问速度提升,100 倍的创建、销毁速度提升。

也就是使用Tagged Pointer之后,NSNumber指针里面存储的数据变成了:Tag + Data

objc_msgSend()函数能识别Tagged Pointer,比如NSNumberintValue方法,直接从指针提取数据,节省了以前的调用开销。

之前, NSNumber等对象需要动态分配内存、维护引用计数等,NSNumber指针存储的是堆中NSNumber对象的地址值。

上一篇 下一篇

猜你喜欢

热点阅读