32位系統和64位系統

前言

衆所周知,我們通常說操作系統是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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章