一个String,到底有多大?

发布于 2023-12-01  127 次阅读


如果直接用sizeof输出的话,一般std::string与FString都是32字节大小

但是正常要获取字符串的大小,要求得的都是字符串的内存大小。要获取实际的大小,需要获取长度*单个字符的大小。

    std::string x = "abcdefg";
    std::string xx = "cdefgabcdefgab";
    std::string xxx = "222222wiajnduhaiudhaidijanduianduihq0uwd019duaqhdnandaojwd01uw-   9du2-9dandnad-1=djjanidnjknsklanodjnoaihwd01h0h912ue-92hdhada";

    std::cout << sizeof(x) << "|" << x.size() << std::endl;
    std::cout << sizeof(xx) << "|" << xx.size() << std::endl;
    std::cout << sizeof(xxx) << "|" << xxx.size() << std::endl;

    size_t x_size = sizeof(char) * x.size();

为什么他们是不同大小?

在C++中,使用 sizeof 运算符可以获取字符串对象本身的大小,包括字符串内容所需的内存以及用于管理字符串的一些元数据。对于 std::string 类型的字符串对象,sizeof(std::string) 返回的是字符串对象本身的大小,而不仅仅是字符串内容的大小。

而关于字符串内容的实际大小,它取决于字符串的长度和字符串所使用的存储方式。对于 std::string 类型的字符串,它会根据字符串的长度动态分配所需的内存空间来存储字符串内容。实际的字符串内容大小会根据字符串的长度而变化,比字符串对象本身的大小要大。

字符串对象本身的大小是指字符串对象占用的内存大小,包括字符串内容所需的内存以及用于管理字符串的元数据。对于 std::string 类型的字符串对象,可以使用 sizeof(std::string) 来获取字符串对象本身的大小。
字符串内容的实际大小是指字符串内容所占用的内存大小,它取决于字符串的长度和所使用的存储方式。对于 std::string 类型的字符串,实际的字符串内容大小会根据字符串的长度而变化。

需要注意的是,对于 std::string 类型的字符串,它会使用动态内存分配来管理字符串内容,因此实际的字符串内容大小可能会比字符串对象本身的大小要大。