当前位置:   article > 正文

【C++修炼之路 第五章】string 类(补充):string 扩展空间规律 + reserve 的缩容 + resize 的使用

【C++修炼之路 第五章】string 类(补充):string 扩展空间规律 + reserve 的缩容 + resize 的使用

在这里插入图片描述

在这里插入图片描述



1、深入探寻 string 扩展空间的规律 与 capacity 的变化


1.1 string 内部的 _Buf 数组


外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传



打开监视窗口,可以看到 string 类中有个成员变量数组 _Buf

该数组空间大小为 16字节

上面存入不同长度的字符串时,可以发现两者存储的位置不同

  • 当存入字符串的长度小于 16字节时,就会存入自己的成员:数组中

  • 当大于16字节,会到内存中开辟空间,使用成员变量:指针 _Ptr 指向字符串


  类中 _Buf 数组的设计:小字符串无需存储在内存中,而是存在自己的数组中,以空间换取时间,提高不少时间效率,同时减少了内存碎片的产生

注意:实际上最多只能存入 15个有效字符,第16个字符是用于存字符串结尾的 ‘\0’

  没扩容前,capacity 就是固定为 15 字节大小:如下面字符串本身大小为 6(包括尾部的 ‘0’) ,而capacity 固定为 15,不是 6

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传




1.2 观察 不同平台和不同编译器之间 的不同扩容表现



声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/正经夜光杯/article/detail/901065
推荐阅读
相关标签