VisualStudio下std::string的内存布局
主要成员
union _Bxty { // storage for small buffer or pointer to larger one _Elem _Buf[_BUF_SIZE]; _Elem *_Ptr; } _Bx; size_type _Mysize; // current length of string size_type _Myres; // current storage reserved for string
其中,_Bx保存着string的真正成员,如果string长度在16以内,可以直接存放到string对象的内部;
否则,_Bx._Ptr保存存放真正内容的指针;
当string长度增长时,会重新分配更大的内存空间,并且将原来的字符串拷贝至新分配的空间中去。
在Visual Studio下,sizeof(str1) = 0x00000020 = 32个字节