关于字符串的一些猜想(1)

1.关于NSMutableString的一个疑问. 为何NSMutableString字符串拼接超过34字符串.字符串地址会发生变化.这是字符串的内存布局图.接下来是我的一些猜想和实验.

字符串内存布局


查看内存


打开内存查看0x00006000033cb780这个地址发现char*的字符串首地址是一个字符串长度用1个字节来存储剩下的存储字符串

在c语言中字符串是以/0结束. 除去一个/0结尾字符串 加上一个首地址1字节存储的字符串长度.  实际开辟的内存空间只能存储36 -2 = 34个字符.也就是1e.    这时候如果在拼接一个字符串话.会覆盖其他数据.

这时候NSMutableString 会开辟一块新的内存空间把0x00006000033cb780地址的内存空间的数据拷贝到新的内地空间中去.然后释放旧的内存空间.

新字符串空间
旧字符串空间

打印旧字符串地址发现.字符串地址的长度和开始q打头的字符串已经没了.  怀疑系统已经标记了这块内存.到时统一释放.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容