1. 程式人生 > >32位,64位編譯器下c語言資料型別對應位元組數

32位,64位編譯器下c語言資料型別對應位元組數

一、程式執行平臺 
       不同的平臺上對不同資料型別分配的位元組數是不同的。 
       個人對平臺的理解是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位機上的大小差異

int long size_t time_t long long int
32位機器 4位元組 4位元組 4位元組 4位元組 8位元組
64位機器 4位元組 8位元組 8位元組 8位元組 8位元組

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