内存布局

2020-04-21  本文已影响0人  不如养花

内存管理

内存布局

image.png

从低到高依次是:
代码段:编译之后的代码
数据段:

Tagged Pointer

从64bit开始,引入的技术,用于优化NSString,NSNumber,NSDate等小对象的存储
在没用使用Tagged Pointer之前,NSNumber等对象需要动态分配内存,维护引用计数等,NSNumber指针存储的是堆中的NSNumber对象的地址值
使用Tagged Pointer之后,NSNumber里存储的数据变成了Tag+Data,也就是将数据直接存在了指针中
当指针不够存储数据时,才会使用动态分配内存的方式来存储数据

如何判断一个指针是否为Tagged Pointer?
iOS平台,最高有效位是1(第64bit)
Mac平台,最低有效位是1

自动释放池

Runloop和autorelease

在主线程的Runloop中注册了2个Observer,
第一个Observer, 监听了kCFRunLoopEntry事件,会调用objc_autoreleasePoolPush(),优先级最高,保证创建自动释放池发生在其他所有回掉之前
第二个Observer,

上一篇 下一篇

猜你喜欢

热点阅读