您好,匿名用户
随意问技术百科期待您的加入

iOS系统的内存是什么结构

0 投票

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

NSString *str = [[NSString alloc] init]; // 0x00d892b4
NSArray *arr = [[NSArry alloc] init]; // 0x0742fb30

据我了解,操作系统进行内存分配是有一定顺序的,不可能跳跃的分配,那么为什么iOS程序分配内存的时候,地址跳跃极大呢?

用户头像 提问 2012年 12月1日 @ Udyr 上等兵 (341 威望)
分享到:

1个回答

0 投票
 
最佳答案

iOS的内存分三段,Text段存运行时代码,Stack段存编译时申请空间的数据,Heap段存运行时申请空间的数据。
NSString的init方法就是把@""付给这个指针,同:initWithString:@"",同 = @""。iOS会给@""(或@"abcd")在编译时就分配内存,放在Stack段。Stack段是从低位开始向高位使用,不受引用计数控制。
NSArray的init方法则是在运行时才分配空间的,放在Heap段。Heap段是从高位开始的,受引用计数控制。

用户头像 回复 2012年 12月1日 @ Miss Fortune 上等兵 (418 威望)
选中 2012年 12月1日 @Udyr
提一个问题:

相关问题

0 投票
1 回复 48 阅读
用户头像 提问 2012年 12月1日 @ Aries 上等兵 (238 威望)
0 投票
1 回复 38 阅读
用户头像 提问 2012年 12月1日 @ Corki 上等兵 (263 威望)
0 投票
1 回复 38 阅读
用户头像 提问 2012年 12月1日 @ Talon 上等兵 (294 威望)
+1 投票
1 回复 53 阅读
0 投票
1 回复 37 阅读

欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。
温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。

欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。
...