程式設計確定系統是32位還是64位
阿新 • • 發佈:2019-01-06
本文參考《深入理解計算機系統》
每臺計算機都有一個字長(word size)指明整數和指標資料的標稱大小(nominal size)。因為虛擬地址是以這樣的一個字來編碼的,所以字長決定的最重要的系統引數就是虛擬地址空間的最大大小。也就是說,對於一個字長位n的機器而言,虛擬地址的範圍位0~2ⁿ-1,程式最多訪問2ⁿ個位元組。
明白了機器的字長定義了程式能夠使用的虛擬地址的範圍,那麼32位字長就是4GB虛擬地址空間。隨著處理器計算能力的發展,32為字長已經成為限制微處理器能力不斷增長的主要因素。所以,更大字長的64位機器就出現了(X86-64),程式可以訪問2^64位元組儲存器的能力。X86-64程式碼的主要特性如下:
a) 指標和長整數都是64位。整數算術運算支援8、16、32、64位資料型別。
b) 通用目的暫存器由32位系統的8個擴充套件到16個。
c) 許多程式狀態都儲存在暫存器中,而不是棧中。整型和指標型別的過程引數(最多六個)通過暫存器傳遞。有些過程根本不需要訪問棧。
d) 如有可能,條件操作用條件傳送指令實現,會得到比傳統分支程式碼更好的效能。
e) 浮點操作用面向暫存器的指令集來實現,而不用基於棧的方法來實現。
所以可用編寫程式檢視指標的大小來確定系統的位數,程式碼如下:
#include<stdio.h>
int main(){
void *ptr;
printf("size of pointer is %ld bytes\n",sizeof(ptr));
printf("The system is %ld bits\n",sizeof(ptr)*8);
return 0;
}
[email protected]:~/Workspace$ gcc sysbit.c -o sysbit
size of pointer is 8 bytes
The system is 64 bits
由此可見,本系統是64位系統。