3-runtime 之 Tagged Pointer

Tagged Pointer 是自从iPhone 5s 之后引入的特性

1 先说一下iOS的内存布局

在这里插入图片描述

  • 代码区:存放编译之后的代码
  • 数据段 :字符串常量 : NSString *hello = @“hello”;已经初始化和未初始化的全局变量,静态变量
  • 堆:通过alloc,malloc,calloc 动态分配的内存空间
  • 栈 :函数调用开销,局部变量
    // 静态变量 
    static int a = 1;
    // 静态变量
    static int b;
    // 部变量 栈上
    int e;
    // 局部变量 栈上
    int d = 2;
    // 字符串常量
    NSString *hello = @"hello";
    // 堆上
    NSObject *obj = [[NSObject alloc]init];

2 Tagged Pointer
这个技术是用于64位处理器的的
这个技术的出现就是为了优化NSNumber,NSString 等小对象的存储,

在之前的话是一个指针代表一个地址,现在的话是直接将数据存储到指针本身,一个指针就代表一个值。

当指针不够存储数据的时候,才会使用动态分配内存的方式来存储数据。

没有了malloc 和 free 的过程,大大提高了执行效率

    NSNumber *num1 = @10;
    NSNumber *num2 = @20;
    NSNumber *num3 = @30;
//    (lldb) p num1
//    (__NSCFNumber *) $0 = 0x9d864a09dabb7827 (int)10
//    (lldb) p num2
//    (__NSCFNumber *) $1 = 0x9d864a09dabb79c7 (int)20
//    (lldb) p num3
//    (__NSCFNumber *) $2 = 0x9d864a09dabb7967 (int)30
//    (lldb)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值