11月02, 2020

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个字节的内存。

点击查看原文>

本文链接:https://blog.jnliok.com/post/R5s0BudUKwYNDAfrIVh4.html

-- EOF --

Comments