vector容器
- 和array区别在于空间运用的灵活性。线性,单端数组
vector
是一个类,继承自__vector_base
- 三个成员变量
__begin_
指向容器元素起始地址,__end_
指向末尾元素地址下一个指针,__end_cap_
表示这次容器容量,满则开辟新空间。
void start() {
vector<int> v;
// 24,三个成员变量的指针
cout << sizeof(v) << endl;
}
- 调试看内存
string容器
- 源码可以看出,string容器是有短字符串优化的机制的。实际是分析的
basic_string
内存布局。 - 字符串有多短看样子,取决于目标架构(???)。
- 长字符串24个字节,
__data_
指向实际字符串的指针,__size_
实际大小,__cap_
容器此次容量,满则开辟新空间。
- 源码可以看出,短字符串会占用2个或者23个字节的空间。由于字符数组最后以
\0
结束,实际长度为22。字符串长度等于23时采用上面长字符内存布局方式布局。__size_
占一个字节表示字符串长度。
- 先给
s
22个字符,lldb调试看结果。