前言
衆所周知,我們通常說操作系統是32位還是64位說的其實是32位處理器(CPU)還是64位處理器(CPU),Windows系統有32位和64位之分,下面我們來總結一下32位系統和64位系統的原理、區別以及如何判斷。
32位系統和64位系統的原理
我們現在所稱的計算機系統是32位或64位主要依據的是CPU解析的字組大小(字組大小:CPU每次能處理的數據量)
- 32位處理器
32位處理器是指CPU內部的通用寄存器的寬度爲32比特,支持整數的32比特寬度的算術與邏輯運算。
32位系統CPU一次可處理32位數據,即一次處理4個字節。
- 64位處理器
64位處理器是指CPU內部的通用寄存器的寬度爲64比特,支持整數的64比特寬度的算術與邏輯運算。
64位系統CPU一次可處理64位數據,即一次處理8個字節。
32位系統和64位系統的區別
- 數據的處理能力
64位系統通用寄存器的寬度相較於32位系統增加了一倍,可處理的數據位數也增加了一倍,數據處理的能力大大增強。
- 內存的尋址能力
32位CPU的地址總線不會超過32根,那麼它所能達到的尋址範圍也就不會超過2的32次方字節(存儲單元以字節爲單位),也就是 4GB。
如果是64位CPU的話,它所能達到的尋址範圍理論上就會是2的64次方字節(上億GB)。
- 要求的配置不同
32位操作系統可以安裝在32位CPU或64位CPU的電腦上,當然,32位操作系統安裝在64位電腦上,其硬件恰似“大馬拉小車”:64位CPU的效能就會大打折扣。
64位操作系統只能安裝在64位CPU的電腦上。
32位系統和64位系統的判斷
- 方法一:用命令查看
[root@localhost ~]# getconf LONG_BIT
[root@localhost ~]# uname -a(顯示系統信息)輸出:x86_64表示64位系統,i686 i386表示32位系統
[root@DB-Server ~]# arch或者uname -m 輸出:x86_64表示64位系統,i686表示32位系統
- 方法二:判斷指針大小
指針是用來存放地址的變量。
32位的CPU上,地址是32個0或1組成的二進制序列,地址就得用4byte的空間來存儲,所以一個指針變量的大小就是4byte。同理,64位的CPU上指針變量的大小就是8byte。
int main(){
void *ptr = 0;
printf("%d\n", sizeof(ptr));
return 0;
}
- 方法三:判斷編碼方式
gcc以__i386__來進行32位編碼,以__x86_64__來進行64位編碼
int main(){
#ifdef __x86_64__
printf("__x86_64__\n");
#elif __i386__
printf("__i386__\n");
#endif
return 0;
}
- 方法四:使用宏定義_WORDSIZE
輸出size:64表示64位系統,輸出size:32表示32位系統
int main(){
printf("size:%d \n", __WORDSIZE);
return 0;
}