一、64位系統和32位有什么區別?
- 64bit CPU擁有更大的尋址能力,最大支持到16GB內存,而32bit只支持4G內存
- 64位CPU一次可提取64位數據,比32位提高了一倍,理論上性能會提升1倍。但這是建立在64bit操作系統,64bit軟件的基礎上的。
什么是64位處理器?
- 之所以叫做“64位處理器”,是因為電腦內部都是實行2進制運算,處理器(CPU)一次處理數據的能力也是2的倍數。8位處理器、16位處理器、32位處理器和64位處理器,其計數都是2的倍數。一次處理的數據越大,該電腦處理信息的能力越大;因此64位處理在先天就比32位處理器具有快速的能力。那為什么不用更高級的128位處理器呢?因為位數越高,處理器芯片的設計也就越復雜,目前的技術水平暫時無法制造這么復雜的芯片。
二、數據類型對應字節數
程序運行平臺
- 不同的平臺上對不同數據類型分配的字節數是不同的。個人對平臺的理解是CPU+OS+Compiler,是因為:
1、64位機器也可以裝32位系統(x64裝XP);
2、32位機器上可以有16/32位的編譯器(XP上有tc是16位的,其他常見的是32位的);
3、即使是32位的編譯器也可以弄出64位的integer來(int64)。
- 以上這些是基于常見的windows平臺,加上我們可能很少機會接觸的其它平臺(其它的CPU和OS),所以個人認為所謂平臺的概念是三者的組合。
- 雖然三者的長度可以不一樣,但顯然相互配合(即長度相等,32位的CPU+32位的OS+32位的Compiler)發揮的能量最大。
- 理論上來講 我覺得數據類型的字節數應該是由CPU決定的,但是實際上主要由編譯器決定(占多少位由編譯器在編譯期間說了算)。
常用數據類型對應字節數
基本整型有char,short,int,long這四種。加上無符號的這四種,那就是8種。
可用如sizeof(char),sizeof(char*)等得出。
在C和C++編程中,數據類型的大小是在頭文件limits.h和climits中包含。
-
32位編譯器:
char :1個字節(8位,一個ASCII碼字符長度就是8位,unicode編碼等16-32位)
char*(即指針變量): 4個字節(32位的尋址空間是2^32, 即32個bit,也就是4個字節。同理64位編譯器)
short : 2個字節 (short其實是short int 的縮寫)
//(int最高可存4字節32位數據,最低16位,也可存24位)。
int: 4個字節 ??杀硎? -2^16 ~ 2^16-1的有+ - 正負符號的整數
unsigned int : 4個字節。可表示 0 ~ 2^32-1的無符號整數
float: 4個字節
double: 8個字節
long: 4個字節 (long其實是long int 的縮寫)
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個字節
如何選擇變量的整數類型
- 通常,int 是計算機處理起來效率最高的長度,如果沒有其他必要的理由,那么就用int。
- 如果變量的值不可能為負值,那么就用 unsigned 無符號整型,同樣的存儲單元,可以表示更大的數。
- 如果知道變量的值可能會超過16位,那么最好用long ,即使系統上int可表示32位,也應該這樣做。因為,當程序移植到16位系統時,int只能表示16位,這時候程序中這個變量就會內存溢出,無法工作。
- short比int小,但是通常還是用int較多。只有當有大型整型數組時,才有必要使用short來節省內存空間。雖然有的系統int和short大小一樣,但是當移植到int位數更大的系統時,用int定義的整型數組內存就翻倍了。內存能省則省。