zoukankan      html  css  js  c++  java
  • C++中的string类型占用多少个字节

    偶然间碰到一个一个问题,问题大概是这样子的:C++中一个std::string 变量中包含1万个字符,如果sizeof这个变量,会得这个变量占有多少个字节;于是在网上搜集资料进行验证:

    代码如下:

     1 #include<iostream>
     2 #include<string>
     3 
     4 int main(){
     5     std::string str_test1;
     6     std::string str_test2 = "Hello Word";
     7 
     8     int value1, value2,value3;
     9 
    10     value1 = sizeof(str_test1);
    11     value2 = sizeof(str_test2);
    12     value3 = sizeof(std::string);
    13 
    14     std::cout<<"str_test1占" << value1 <<" 个字节" <<std::endl;
    15     std::cout<<"str_test2占" << value2 <<" 个字节" <<std::endl;
    16     std::cout<<"string占" << value3 <<" 个字节" <<std::endl;
    17     
    18     return 0;
    19 }

    用g++编译后,得到的结果如下:

    1 root@sukingw:~/algorithm# ./sizeofString 
    2 str_test1占32 个字节
    3 str_test2占32 个字节
    4 string占32 个字节
    5 root@sukingw:~/algorithm# 

    这说明所有的std::string占用32个字节,回看代码可发现str_test1和string都没有赋值,而str_test2赋有值,结果却是一样的。这是为什么呢?

    搜集资料发现:

    string的实现在各库中可能有所不同,但是在同一库中相同一点是,无论你的string 里放多长的字符串,它的sizeof()都是固定的,字符串所占的空间是从堆中动态分配 的,与sizeof()无关。    sizeof(string)=4可能是最典型的实现之一,不过也有sizeof() 为12、32字节的库实现(如本例)。

    通常,我们所用到的 string 类型一般都会是这样实现:

          

    class {
           char *_Ptr;    //指向字符串的指针
           int _Len;      //字符串的长度
           ........ 
    }; 

    所以,我们一般接触到的string类型所占字节数为 8+。

  • 相关阅读:
    前端工程化浅学
    jQuery学习
    黄金票据和白银票据获取域控权限
    [转]0day零距离
    [转]走近0day
    [转]人生如解 -- 关于破解组织的乱弹
    [转]WAREZ无形帝国
    [转]BSD系统正在死亡?一些安全研究人员这样认为
    Solaris:你好奇的十件事
    Windows和Office激活汇总
  • 原文地址:https://www.cnblogs.com/wangshujing/p/7341540.html
Copyright © 2011-2022 走看看