C C 基本資料型別占用的位元組數和注意事項

2021-06-27 06:34:53 字數 1996 閱讀 6450

不同的平台上對不同資料型別分配的位元組數是不同的。 

個人對平台的理解是cpu+os+compiler

(處理器

+系統+編譯器

)是因為: 

1、64位機器也可以裝32位系統(x64裝xp); 

2、32位機器上可以有16/32位的編譯器(xp上有tc是16位的,其他常見的是32位的); 

3、即使是32位的編譯器也可以弄出64位的integer來(int64)。 

以上這些是基於常見的wintel平台,加上我們可能很少機會接觸的其它平台(其它的cpu和os),所以個人認為所謂平台的概念是三者的組合。 

雖然三者的長度可以不一樣,但顯然相互配合(即長度相等,32位的cpu+32位的os+32位的compiler)發揮的能量最大。 

理論上來講 我覺得資料型別的位元組數應該是由cpu決定的,但是實際上主要由編譯器決定(佔多少位由編譯器在編譯期間說了算)。 

可用如sizeof(char),sizeof(char*)等得出 

32位編譯器:

char :1個位元組 

char*(即指標變數): 4個位元組(32位的定址空間是2^32, 即32個bit,也就是4個位元組。同理64位編譯器) 

short int : 2個位元組 

int: 4個位元組 

unsigned int : 4個位元組 

float: 4個位元組 

double: 8個位元組 

long: 4個位元組 

long long: 8個位元組 

unsigned long: 4個位元組 

64位編譯器:

char :1個位元組 

char*(即指標變數): 8個位元組 

short int : 2個位元組 

int: 4個位元組 

unsigned int : 4個位元組 

float: 4個位元組 

double: 8個位元組 

long: 8個位元組 

long long: 8個位元組 

unsigned long: 8個位元組 

下面列出一些基本型別在32

位及64

位機上的大小差異 c

har*

long

size_t

time_t

long long int

unsigned long

32位機器

4位元組4位元組

4位元組4位元組

8位元組4位元組

64位機器 8

位元組8位元組

8位元組8位元組

8位元組8位元組

但如果是linux

系統的話,在

64位編譯器下

long

和unsigned long

型別將變成

8個位元組。

在寫跨平台的程式時,一定要注意這些基本型別的長度大小。

從學習c++

語言基礎的時候,我都一直以為

bool

資料型別是占用乙個位元組的資料位的,但最近仔細復讀

(c++)

中發現,

它並不是一定會占用乙個位元組的資料位的,bool

資料型別與

int型別一樣,占用記憶體的位元組數都是與編譯系統相關的,它在不同的編譯系統占用的位元組數有所不同

,在vc++6.0

中,它占用的位元組數是

1個位元組,所以為了能編寫可移植性好的和占用記憶體少的程式,

bool

的變數,可以應用以下方式來定義

(至少我現在開始是這樣做的):

bool  m_bret : 1;

這樣定義的好處是,當你定義了很多的這樣的

bool

型別,它所占用的資料就會越少,因為乙個位元組可以定義8個

bool

的型別,如果單獨定義乙個這樣的型別,它一樣占用乙個位元組的資料位,這不起作用,而當定義多點這樣的資料型別它才起作用。

CC 基本資料型別 位元組數

1位元組 8位 1k 1024位元組 2 10 c語言型別資料所佔位元組數和機器字長及編譯器有關係,int,long int,short int的寬度都可能隨編譯器而異。但有幾條鐵定的原則 ansi iso制訂的 sizeof short int sizeof int sizeof int size...

C C 基本資料型別所佔位元組數

關於這個基本的問題,很早以前就很清楚了,c標準中並沒有具體給出規定那個基本型別應該是多少位元組數,而且這個也與機器 os 編譯器有關,比如同樣是在32bits的作業系統系,vc 的編譯器下int型別為佔4個位元組 而tuborc下則是2個位元組。所以int,long int,short int的寬度...

C C 基本資料型別所佔位元組數

所以int,long int,short int的寬度都可能隨編譯器而異。但有幾條鐵定的原則 ansi iso制訂的 下面給出不同位數編譯器下的基本資料型別所佔的位元組數 16位編譯器 char 1個位元組 char 即指標變數 2個位元組 short int 2個位元組 int 2個位元組 uns...