一個C程式辨別系統是64位還是32位
阿新 • • 發佈:2018-12-02
知識儲備:
計算機的位數取決CPU中暫存器的寬度,具體來說就是算術邏輯運算單元(ALU)的寬度,用來表徵計算機的計算能力,ALU一次可以計算最大長度整數即計算機的位數。
在32bit的計算機中,ALU一次可以計算的最大整數為4個位元組。
在64bit的計算機中。ALU一次可以計算的最大整數為8個位元組。
實際上,int這種型別是用來描述機器字長的,也就是說它可以代表暫存器的寬度。但是實際上int和long這兩種型別不但和CPU體系結構有關係,同時和編譯器的處理也有關係,不同的編譯選項下它們的大小也是隨之變化的,因此用這兩個型別來測試當前系統是64bit還是32bit是不可取的。
如何測試?
我們可以通過計算在作業系統中可定址單元的個數,這樣就可以計算出對應作業系統中一個地址的大小來區分64bit和32bit。編譯器的位數要與作業系統一致。在32bit和64bit作業系統下姑且認為地址匯流排的條數分別是32條和64條(實際中不是這樣的,但是可以這麼理解),那麼形成的地址的大小分別是4位元組和八位元組。
測試程式碼:
#include<cstdio>
int main(void){
printf(sizeof(void*)==8?"64bit\n":"32bit\n");
return 0;
}
1.ubuntu64位
2.Dev C++ 32bit
3.Dev C++ 64bit