内存分配方式

你看下这图,有什么想法没?我的理解:stactStr1,stactStr2和stactStr3本身是在栈中,分别指向常量区的"123"和"12"的内存地址,所以stactStr1和stactStr2的指向的内存地址一样,因为都是"123";
而alloc init是对堆的操作, NSString *heapStr1 = [[NSString alloc] initWithFormat:@"123"];从堆中申请空间,返回的是这空间的首地址,这空间里的数据是"123"这字符,所以heapStr1和heapStr2的内存地址不同,虽然它们都是"123".


还有,我觉得[NSString alloc] initWithFormat:@"123"]和[NSString stringWithFormat:@"123"];申请的内存过程都是一样的,都一样是在堆中,不过一个是要你自己手动释放,一个是api内部已经已经设置成的autorelease,而不管是[str1 copy]还是[NSString stringWithString:str1]其实都是把str1指向的内存地址反回去而已,



还有我发现网上很多人说什么文字常量区和全局静态区,说:文字常量区是保存常量的,我一直不明白这文字常量区是什么,怎么来?我发现根本没有什么文字常量区,常量和全局变量都是一样保存在全局静态区里,如有不对望大神指出,下面是验证示图:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值