程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> C語言基礎知識 >> 淺談C++中的string 類型占幾個字節

淺談C++中的string 類型占幾個字節

編輯:C語言基礎知識

在C語言中我們操作字符串肯定用到的是指針或者數組,這樣相對來說對字符串的處理還是比較麻煩的,好在C++中提供了 string 類型的支持,讓我們在處理字符串時方便了許多。

首先,我寫了一段測試代碼,如下所示:
代碼如下:

#include <iostream>
using namespace std;

int main(void)
{
 string str_test1;
 string str_test2 = "Hello World";

 int value1, value2, value3;

 value1 = sizeof(str_test1);
 value2 = sizeof(str_test2);
 value3 = sizeof(string);

 cout<<"str_test1占 "<<value1<<" 個字節"<<endl;
 cout<<"str_test2占 "<<value2<<" 個字節"<<endl;
 cout<<"string占 "<<value3<<" 個字節"<<endl;

 system("pause");
 return 0;
}

首先,我用G++編譯運行,得到的結果如下圖所示:

這說明string占4個字節。
之後,我用VS2012編譯運行,得到的結果如下圖所示:


奇怪,這裡string竟然占28個字節。
這裡,我們注意觀察,還會發現一個問題,不管有沒有對string類型的變量賦值,或者是賦什麼值,得到的結果是一樣的。

下面,來解釋上述問題:
string的實現在各庫中可能有所不同,但是在同一庫中相同一點是,無論你的string裡放多長的字符串,它的sizeof()都是固定的,字符串所占的空間是從堆中動態分配的,與sizeof()無關。    sizeof(string)=4可能是最典型的實現之一,不過也有sizeof()為12、32字節的庫實現。通常,我們所用到的 string 類型一般都會是這樣實現:
代碼如下:

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

所以,我們一般接觸到的string類型所占字節數為 8+。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved