iOS程序的内存布局

turboksiOS54

image.png

  1.     代码段:编译之后的代码

  2.     数据段:

    1. 字符串常量:比如NSString * str = @“123”

    2. 已初始化数据:已初始化的全局变量、静态变量等

    3. 未初始化的数据:未初始化的全局变量、静态变量等

  3.     栈:函数调用开销,比如局部变量。分配的内存空间地址越来越小

  4.     堆:通过alloc、malloc、calloc等动态分配的空间,分配的空间地址越来越大



    Tagged Pointer:

    1.    从64bit开始,iOS引入了Tagged Pointer技术,用于优化NSNumber、NSDate、NSString等小对象的存储。

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

    3.    使用Tagged Pointer之后,NSNumber指针里边存储的数据变成了:Tag + Data,也就是将数据直接存储在了指针中

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

    5.    objc_msgSend能识别Tagged Pointer,比如NSNumber的intValue方法,直接从指针提取数据,节省了以前的调用开销


    如何判断一个指针是否为Tagged Pointer?

    1.    iOS平台,最高有效位是1(第64bit)

    2.    Mac平台,最低有效位是

    image.png


    

int main(int argc, const char * argv[]) {

    @autoreleasepool {

        

        NSString * name;

        name = [NSString stringWithFormat:@"asd"];

        NSLog(@"%@",name);

        

        

        NSString * str;

        str = [NSString stringWithFormat:@"asdfghjklqwertyuiopasdfghjklqwertyuiop"];

        NSLog(@"%@",str);


    }

    return 0;

}


打印结果:

(lldb) p name

(NSTaggedPointerString *) $3 = 0xd4246379d93db1bf @"asd"

(lldb) p str

(__NSCFString *) $4 = 0x000000010042a200 @"asdfghjklqwertyuiopasdfghjklqwertyuiop"

(lldb) 

    

    


返回列表

上一篇:GCD定时器

下一篇:dealloc

相关文章

RunLoop

RunLoop

RunLoop一、基础理论顾名思义1.    运行循环2.    在程序运行过程中循环做一些事情3.    是用户态和内核态之间的交互模式应...

OC对象的本质

OC对象的本质

我们平时编写的oc代码、底层实现其实是C\C++代码OC代码    ——>    C\C++    ——>  &nbs...

iOS的KVO、KVC

iOS的KVO、KVC

一:KVO  在实际的开发过程中,我们可能会遇到这种需求,就是需要根据一个对象某个属性值的改变,来作出不同的处理。但是实现起来比较麻烦,需要在很多地方进行判断处理,为了方便我们的开...

GCD定时器

GCD定时器

NSTimer依赖于RunLoop,如果RunLoop的任务过于繁重,可能会导致NSTimer不准时。而GCD的定时器会更加准时。- (void)viewDidLoad {   ...

OC的实例对象、类对象、元类对象的关系

OC的实例对象、类对象、元类对象的关系

Objective-C中的对象、简称OC对象,主要分为三种:instance对象(实例对象)、class对象(类对象)、meta-class对象(元类对象)。一:instance对象instance对...

dealloc

dealloc

当调用dealloc方法的时候,执行顺序可以在源码中查找如下(objc源码):1.// Replaced by NSZombies- (void)dealloc {    _obj...