sizeof(std::string), 到底是多少?
sizeof(std::string);
又或者
std::string str=""; sizeof(str);
得到的结果到底是多少呢?
在使用VS2015的32位debug构建中,sizeof(std::string)返回28;在64位debug构建中,得到40;在32位release构建中,得到24,在64位release构建中,得到32。
这是因为std::string的内部表示随不同的构建选项而变化:例如,调试构建通常包含额外的机制以帮助发现bug,这会增加表示的大小;此外,在64位构建中,指针更大,所以大小相对32位构建的要大点。
string的实现在各库中可能有所不同,但是在同一库中相同一点是,无论你的string里放多长的字符串,它的sizeof()都是固定的,字符串所占的空间是从堆中动态分配的,与sizeof()无关。 sizeof(string)=4可能是最典型的实现之一,不过也有sizeof()为12、32字节的库实现。 但是MS2015测试后sizeof(string)=40.还是跟编译器有关,
也就是说sizeof(string)和字符串的长度是无关的,在一个系统中所有的sizeof(string)是一个固定值,这个和编译器相关,string字符串是存储在堆上,这个属于动态分配的空间,对于别的整形浮点型数据类型则没有这个问题。
参考: https://stackoverflow.com/questions/42270152/why-does-sizeof-operator-on-a-stdstring-yield-unexpected-result
---------------------
作者:X-Programer
来源:CSDN
原文:https://blog.csdn.net/q5707802/article/details/84848886
版权声明:本文为博主原创文章,转载请附上博文链接!