我们经常会用到C++字符串计算长度,那么,str.length(),str.size()和sizeof(str)有什么区别呢
string str="abcdefioiogijoijoi";
cout<<sizeof(str)<<endl;
cout<<str.length()<<endl;
cout<<str.size()<<endl;
运行结果为:
24
18
18
sizeof(str)
-
GCC 的
libstdc++
:-
在 64 位系统上,
sizeof(std::string)
通常是 32 字节。 -
其中:
-
8 字节用于指向堆内存的指针。
-
8 字节用于存储字符串长度。
-
8 字节用于存储容量。
-
8 字节用于 SSO 的缓冲区(可以存储 15 个字符 + 1 个空终止符)。
-
-
-
Clang 的
libc++
:-
在 64 位系统上,
sizeof(std::string)
通常是 24 字节。 -
其中:
-
8 字节用于指向堆内存的指针。
-
8 字节用于存储字符串长度和容量(通过位操作压缩存储)。
-
8 字节用于 SSO 的缓冲区(可以存储 22 个字符 + 1 个空终止符)。
-
-
而str.length()和str.size()结果总是一样,都是字符串本身占用的字符数,这两个只是名字不同,用哪个都可以。