不同的平台上對不同資料型別分配的位元組數是不同的。
個人對平台的理解是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...