C string型別佔幾個位元組

2021-09-19 12:50:37 字數 2541 閱讀 2110

在c語言中我們操作字串肯定用到的是指標或者陣列,這樣相對來說對字串的處理還是比較麻煩的,好在c++中提供了 string 型別的支援,讓我們在處理字串時方便了許多。這篇文章並不是講解 string 型別的用法,而是講解我個人比較好奇的問題,就是 string 型別佔幾個位元組。

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

#include

using

namespace

std;int

main

(void)

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

這說明string佔4個位元組。

之後,我用vs2012編譯執行,得到的結果如下圖所示:

奇怪,這裡string竟然佔28個位元組。

這裡,我們注意觀察,還會發現乙個問題,不管有沒有對string型別的變數賦值,或者是賦什麼值,得到的結果是一樣的。

下面,來解釋上述問題:

string的實現在各庫中可能有所不同,但是在同一庫中相同一點是,無論你的string
裡放多長的字串,它的sizeof()都是固定的,字串所佔的空間是從堆中動態分配
的,與sizeof()無關。    sizeof(string)=4可能是最典型的實現之一,不過也有sizeof()
為12、32位元組的庫實現。
通常,我們所用到的 string 型別一般都會是這樣實現:
class
;
所以,我們一般接觸到的string型別所佔位元組數為 8+。在c語言中我們操作字串肯定用到的是指標或者陣列,這樣相對來說對字串的處理還是比較麻煩的,好在c++中提供了 string 型別的支援,讓我們在處理字串時方便了許多。這篇文章並不是講解 string 型別的用法,而是講解我個人比較好奇的問題,就是 string 型別佔幾個位元組。首先,我寫了一段測試**,如下所示:

#include

using

namespace

std;int

main

(void)

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

這說明string佔4個位元組。

之後,我用vs2012編譯執行,得到的結果如下圖所示:

奇怪,這裡string竟然佔28個位元組。

這裡,我們注意觀察,還會發現乙個問題,不管有沒有對string型別的變數賦值,或者是賦什麼值,得到的結果是一樣的。

下面,來解釋上述問題:

string的實現在各庫中可能有所不同,但是在同一庫中相同一點是,無論你的string
裡放多長的字串,它的sizeof()都是固定的,字串所佔的空間是從堆中動態分配
的,與sizeof()無關。    sizeof(string)=4可能是最典型的實現之一,不過也有sizeof()
為12、32位元組的庫實現。
通常,我們所用到的 string 型別一般都會是這樣實現:
class
;
所以,我們一般接觸到的string型別所佔位元組數為 8+。

C string型別佔幾個位元組

在c語言中我們操作字串肯定用到的是指標或者陣列,這樣相對來說對字串的處理還是比較麻煩的,好在c 中提供了 string 型別的支援,讓我們在處理字串時方便了許多。這篇文章並不是講解 string 型別的用法,而是講解我個人比較好奇的問題,就是 string 型別佔幾個位元組。首先,我寫了一段測試 如...

double佔幾個位元組

16位編譯器 char 1個位元組 char 即指標變數 2個位元組 short int 2個位元組 int 2個位元組 unsigned int 2個位元組 float 4個位元組 double 8個位元組 long 4個位元組 long long 8個位元組 unsigned long 4個位元...

int佔幾個位元組

int型變數有時候佔4個位元組 在win32 有時候佔2個位元組 在dos 這個int型別的大小到底是跟編譯器有關,還是跟cpu有關,還是跟作業系統有關?所謂的16位32位64位系統是由cpu決定的,由機器指令的定址 暫存器位數決定的 os受cpu的限制,但在32位的cpu下16位的os也可以跑 就...