iOS内存管理之Tagged Pointer

1 背景

iPhone5s是首个采用 64 位架构的A7双核处理器的手机,为了节省内存和提高执行效率,苹果提出了Tagged Pointer的概念。对于 64 位程序,引入 Tagged Pointer 后,相关逻辑能减少一半以上的内存占用,以及3倍的访问速度提升,100 倍的创建、销毁速度提升。

本文将带我们来理解这个概念 是怎么节省内存和提高执行效率的。(注:本篇文章所用系统 皆为64位系统)

2 不使用Tagged Pointer的情况

以NSNumber *a = @(1);为例,在不使用Tagged Pointer的情况下,我们看下在内存上和访问效率上都是什么情况。

在内存上:

如下图所示, 1个小对象 需要至少使用24字节(指针8字节 + 对象16字节 )

栈:在栈上,占1个指针 8字节,里面存储的是堆内存的地址0x600001a92920。

堆:在堆上,占16个字节,isa指针占8个字节,1为int类型,占4个字节,但由于内存对齐机制(ios 内存对齐 为16字节),堆需要16个字节的内存。

在效率上:

NSNumber对象需要动态分配内存、维护引用计数、管理它的生命周期等

方法调用 需要objc_msgSend的执行流程(消息发送、动态方法解析、消息转发)

原文链接:【https://www.infoq.cn/article/R5s0BudUKwYNDAfrIVh4】。未经作者许可,禁止转载。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章