偶然发现一个情况:
std::cout<<sizeof(std::string)<<"\n"; //24
struct Person{
std::string name; //24
int age; //8
std::string arr[2]; //48
};
std::cout<<sizeof(Person)<<"\n"; //80
std::string mystr("白日依山尽,黄河入海流。欲穷千里目,更上一层楼。");
std::cout<<sizeof(mystr)<<"\n"; //24
在mac-clang++12上执行,给出std::string实例恒占用24个字节,不随字符串长度而变化。
想想也知道std::string类实例是保存有,指向实际存储字符串的内存块的指针。
转载自https://www.cnblogs.com/wangshujing/p/7341540.html:
string的实现在各库中可能有所不同,但是在同一库中相同的一点是,无论你的string 里放多长的字符串,它的sizeof()都是固定的,字符串所占的空间是从堆中动态分配 的,与sizeof()无关。 sizeof(string)=4可能是最典型的实现之一,不过也有sizeof() 为12、32字节的库实现。
通常,我们所用到的 string 类型一般都会是这样实现:
class { char *_Ptr; //指向字符串的指针 int _Len; //字符串的长度 ........ };
所以,我们一般接触到的string类型所占字节数为 8+。