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+。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM