当前位置: 首页 > article >正文

c++ vs和g++下的string结构

        话不多说进入正题.注:下述结构是在32位平台下进行验证,32位平台下指针占4个字节.

vs下string的结构

        string总共占28个字节,内部结构稍微复杂一点,先是有一个联合体,联合体用来定义 string中字符串的存储空间:(联合体的内部结构见下图)

        当字符串长度小于16时,使用内部固定的字符数组来存放

        当字符串长度大于等于16时,从堆上开辟空间

        其次:还有一个size_t字段保存字符串长度和一个size_t字段保存从堆上开辟空间总的容量

        最后:还有一个指针做一些其他事情

        因为大多数情况下字符串的长度都小于16,那string对象创建好之后,内部已经有了16个字符数组的固定空间,不需要通过堆创建,可以提高效率.

        故总共占16+4+4+4=28个字节

g++下string的结构

        G++下,string是通过写时拷贝实现的string对象总共占4个字节内部只包含了一个指针,该指针将来指向一块堆空间,内部包含了如下字段:

        1.空间总大小(空间容量)    2.字符串有效长度    3.引用计数   

        4.指向堆空间的指针,用来存储字符串


http://www.kler.cn/a/615564.html

相关文章:

  • 虚拟现实--->unity学习
  • 21 python __name__ 与 __main__
  • 基于大语言模型的智能音乐创作系统——从推荐到生成
  • 知能行每日刷题
  • Acwing6118 蛋糕游戏
  • 【C++重点】虚函数与多态
  • rbpf虚拟机-汇编和反汇编器
  • Python之变量与数据类型总结
  • Share01-WinCC文件越用越大?
  • 项目-苍穹外卖(十五) WebSocket+语音播报功能实现(来订单+催单)
  • 【AI编程学习之Python】第一天:Python的介绍
  • Elasticsearch:人工智能时代的公共部门数据治理
  • 路由器DHCP地址池冲突
  • C++Primer学习(14.1 基本概念)
  • MVC 文件夹:架构之美,开发之魂
  • Redis延时队列在订单超时未报到场景的应用分享
  • mac设备通过brew安装nvm、node
  • GitHub美化个人主页3D图表显示配置操作
  • gnvm切换node版本号
  • 基于Python深度学习的鲨鱼识别分类系统