美文网首页
iOS 内存布局

iOS 内存布局

作者: 孙掌门 | 来源:发表于2020-02-22 14:44 被阅读0次

    iOS 内存布局

    --------高--------
    
    内核
    
    栈
    
    堆
    
    数据段(字符串常亮,已初始化的数据,未初始化的数据等)
    
    代码段
    
    保留
    
    --------低--------
    
    
    1. 代码段,就是我们的程序在编译的时候都会转化为010101这样的代码,然后就放在内存的代码段这个区域

    2. 数据段,包括常量和初始化,未初始化的,比如

    
    NSString *s = @"123";
        NSString *s1 = @"123";
        NSLog(@"%p %p",s,s1);
    
    

    他们的打印是一样的,因为都指向“123”那个数据区。

    然后就是已初始化的数据区,包括已初始化的全局变量,静态变量。

    接下来就是未初始化的全局变量和静态变量

    1. 堆,alloc,malloc,calloc
    2. 栈(由高地址到低地址),函数调用开销,比如局部变量
    // 已初始化的全局变量
    int a = 10;
    // 未初始化的全局变量
    int b = 0;
    - (void)testMemory{
        // 已初始化的静态变量
        static int c = 20;
        // 未初始化的静态变量
        static int d ;
        // 已初始化的局部变量
        int e = 30;
        //未初始化的局部变量
        int f;
        // 对象
        NSObject *obj = [[NSObject alloc] init];
        // 字符串常量
        NSString *str = @"123";
        NSLog(@"a=%p",&a);
        NSLog(@"b=%p",&b);
        NSLog(@"c=%p",&c);
        NSLog(@"d=%p",&d);
        NSLog(@"e=%p",&e);
        NSLog(@"f=%p",&f);
        NSLog(@"obj=%p",&obj);
        NSLog(@"str=%p",&str);
    }
    
    

    我们将打印结果排下

     
    a=0x1086974e8 
    
    c=0x1086974ec
    
    b=0x1086976b8
    
    d=0x1086976a8
    
    
    
    2020-02-22 14:35:37.426457+0800 blogTest[29949:1532803] a=0x1086974e8
    2020-02-22 14:35:37.426618+0800 blogTest[29949:1532803] b=0x1086976b8
    2020-02-22 14:35:37.426747+0800 blogTest[29949:1532803] c=0x1086974ec
    2020-02-22 14:35:37.426853+0800 blogTest[29949:1532803] d=0x1086976a8
    2020-02-22 14:35:37.426963+0800 blogTest[29949:1532803] e=0x7ffee757519c
    2020-02-22 14:35:37.427070+0800 blogTest[29949:1532803] f=0x7ffee7575198
    2020-02-22 14:35:37.427171+0800 blogTest[29949:1532803] obj=0x7ffee7575190
    2020-02-22 14:35:37.427282+0800 blogTest[29949:1532803] str=0x7ffee7575188
    
    

    可以看到,a 比 c 内存地址要小,说明已初始化的额全局变量和静态变量是挨着的,全局变量是放在数据区的。从上面的打印能看出来,地址是从低地址到高地址,堆空间的地址是越分配越大,栈是越来越小。

    相关文章

      网友评论

          本文标题:iOS 内存布局

          本文链接:https://www.haomeiwen.com/subject/bnylqhtx.html