开发者社区> 问答> 正文

iOS系统的内存是什么结构

在Debug iOS应用的时候发现一个有趣的现象,有些对象的内存地址位数非常低,有些对象的内存地址位数非常高。
比如:

NSString *str = [[NSString alloc] init]; // 0x00d892b4
NSArray *arr = [[NSArry alloc] init]; // 0x0742fb30
据我了解,操作系统进行内存分配是有一定顺序的,不可能跳跃的分配,那么为什么iOS程序分配内存的时候,地址跳跃极大呢?

展开
收起
a123456678 2016-07-19 15:37:40 2227 0
2 条回答
写回答
取消 提交回答
  • iOS程序猿

    // 创建在常量区

    NSString *string1 = @"这是一个字符串常量";
    // 创建在堆区
    NSString *string2 = [[NSString alloc] init];
    // 创建在常量区
    NSString *string3 = [NSString string];
    // 快速创建一个格式化的字符串, 创建在堆区
    int number = 2;
    NSString *string4 = [[NSString alloc] initWithFormat:@"%d",number];
    2019-07-17 19:58:27
    赞同 展开评论 打赏
  • iOS的内存分三段,Text段存运行时代码,Stack段存编译时申请空间的数据,Heap段存运行时申请空间的数据。
    NSString的init方法就是把@""付给这个指针,同:initWithString:@"",同 = @""。iOS会给@""(或@"abcd")在编译时就分配内存,放在Stack段。Stack段是从低位开始向高位使用,不受引用计数控制。
    NSArray的init方法则是在运行时才分配空间的,放在Heap段。Heap段是从高位开始的,受引用计数控制。

    2019-07-17 19:58:27
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
手淘iOS性能优化探索 立即下载
聚划算iOS平台动态化方案LuaView 立即下载
云服务器ECS内存增强型实例re6全新发布 立即下载