1. 程式人生 > >一個C程式辨別系統是64位還是32位

一個C程式辨別系統是64位還是32位

知識儲備:
計算機的位數取決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
在這裡插入圖片描述