美文网首页
sizeof(std::string), 到底是多少?

sizeof(std::string), 到底是多少?

作者: 萧潇公举 | 来源:发表于2019-05-26 09:05 被阅读0次

    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

    版权声明:本文为博主原创文章,转载请附上博文链接!

    相关文章

      网友评论

          本文标题:sizeof(std::string), 到底是多少?

          本文链接:https://www.haomeiwen.com/subject/mpqxtctx.html