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

4263 人浏览 | 时间: 2015-06-26 21:14:21 | 作者: codexia
    前面介绍了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的内存是下面这样的:
请微信扫码阅读。
为防止恶意爬虫,
已开启反爬机制,
理解哟~~~~
标注
评论
站内搜
百度搜
传送到手机
手机扫码,识别文字,完成传送x
加载中...
标注内容x
加载中...
添加标注x
收藏 0 点赞 0

相关阅读