首页  >   经验  >   string系列:4 string和string数组内部的实现原理深入剖析

string系列:4 string和string数组内部的实现原理深入剖析

查看 codexia 的博客 2015-06-26 21:14:21 3788
string  
手机阅读 | 转发赚积分
手机收藏 | 分享给好友
简介分析完了string对象本身的内部结构,然后对比CString数组和string数组的差别,最后用图解方式清晰的看到了string数组的实现原理。相信通过这些分析,可以让你对string和string数组有一个非常深入的了解。
    前面介绍了CString数组的内部原理分析,作为C++自带的string,也是必须好好分析一把的。
    string与MFC中的CString是很不一样的。内部的机制也是不一样的。所以需要深入的详细说明一下。
    我们在定义一个string对象时,string分配的内存就只有32字节。直接用于存储字符串的缓冲区大小只有16字节。也就是说,如果赋值给string对象的字符串大小不超过16字节,包括空字符在内的16个字符,那么字符串就直接存入string对象内部的16字节的缓冲区中。但是,如果超出了16字节,那么此时这个小缓冲区就不是存储字符串的了,而是存储字符串缓冲的地址的了。
    那么你会问,这个小缓冲区位于string对象的哪里呢?这个小缓冲区是位于string对象32字节内存的第9个字节开始的16个字节大小的缓冲区。
    紧接着小缓冲区的四个字节,表示的是string对象存储的字符的个数,不包含结尾的空字符。而至于再后面的就不用细究了。
    比如,string str = "1234";,那么str的内存是下面这样的:
    00 00 00 00 cc cc cc cc 31 32 33 34 00 cc cc cc cc cc cc cc cc cc cc cc 04 00 00 00 0f 00 00 00
    而如果string str = "123456789012345";,那么str的内存是下面这样的:
1.微信扫码
2.点击按钮,粘贴命令
自动刷新 手动刷新
命令:rd 13H/) 复制
提示:如果您发送了命令,自动刷新会展开全文。自动刷新最多60秒,超过60秒请点击手动刷新。
创作不易,汗水不止!为防止劳动果实被爬虫窃取,开启了反爬机制,需要您发送命令继续阅读。取关会再次出现此提示。一段时间后出现此提示,请再次发送即可。如有问题,请加客服微信Freeme007处理。感谢您的理解。
标注
评论
站内搜
百度搜
传送到手机
手机扫码,识别文字,完成传送x
加载中...
标注内容x
加载中...
添加标注x
文章标题:string系列:4 string和string数组内部的实现原理深入剖析
文章地址:http://www.cjjjs.com/article/6262015211421664
转载到个人博客,请在文末带上右侧内容(含超链接):本文转载自:string系列:4 string和string数组内部的实现原理深入剖析
收藏 0 点赞 0
公众号
微信赞赏
支付宝赞赏
领支付宝大红包
QQ群

相关阅读

  1. string系列:10 string和IO操作 查找全网同类文章
  2. string系列:9 用C++ string实现任意长度正小数、整数之间的加减法 查找全网同类文章
  3. string系列:8 std::string的字符串拼接操作使用分析 查找全网同类文章
  4. string系列:7 string分割字符串split实现 查找全网同类文章
  5. string系列:6 string和wstring相互转换以及wstring显示中文问题 查找全网同类文章
  6. string系列:5 string截断两端的空格实现 查找全网同类文章
  7. string系列:4 string和string数组内部的实现原理深入剖析 查找全网同类文章
  8. string系列:3 字符串string的修改和string的读取 查找全网同类文章
  9. string系列:2 字符串string声明和string初始化 查找全网同类文章
  10. string系列:1 string概述 查找全网同类文章
分享到:
分享文章[string系列:4 string和string数组内部的实现原理深入剖析]到QQ空间

相关阅读

猜您感兴趣