美文网首页
iOS底层原理 - 内存管理 之 内存布局

iOS底层原理 - 内存管理 之 内存布局

作者: hazydream | 来源:发表于2019-05-22 10:08 被阅读0次

面试题引发的思考:

Q: 内存的几大区域?

  • 按照内存地址由低到高分配依次为以下区域:
    预留区域、代码段、数据段、堆、栈、内核区。

iOS程序的内存布局

内存布局

由以上内存分布分析图可分析一下代码:

// TODO: -----------------  main  -----------------
int a = 10; // 已初始化的全局变量、静态变量等
int b; // 未初始化的全局变量、静态变量等

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

        static int c = 20; // 已初始化的全局变量、静态变量等
        static int d; // 未初始化的全局变量、静态变量等

        int e = 30; // 栈
        int f; // 栈

        NSString *str = @"123"; // 字符串常量

        NSObject *obj = [[NSObject alloc] init]; // 堆

        NSLog(@"\n&a =%p\n&b =%p\n&c =%p\n&d =%p\n&e =%p\n&f =%p\nstr=%p\nobj=%p",
              &a, &b, &c, &d, &e, &f, str, obj);

        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}

打印结果如下:

// 打印结果:------------
&a =0x104af7eb8
&b =0x104af7f84
&c =0x104af7ebc
&d =0x104af7f80
&e =0x7ffeeb109cdc
&f =0x7ffeeb109cd8
str=0x104af7080
obj=0x600003ba8090

根据内存分布分析图可知其中一些特性:

 // 字符串常量 - 以 0x1 开头
 str=0x104af7080

 // 已初始化的全局变量、静态变量等 - 以 0x1 开头
 &a =0x104af7eb8
 &c =0x104af7ebc

 // 未初始化的全局变量、静态变量等 - 以 0x1 开头
 &b =0x104af7f84
 &d =0x104af7f80

 // 堆 - 以 0x6 开头
 obj=0x600003ba8090

 // 栈 - 以 0x7 开头
 &f =0x7ffeeb109cd8
 &e =0x7ffeeb109cdc

相关文章

网友评论

      本文标题:iOS底层原理 - 内存管理 之 内存布局

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