32位和64位系統區別及位元組對齊

2021-07-07 07:15:39 字數 2536 閱讀 3365

1、64bit cpu擁有更大的定址能力,最大支援到16gb記憶體(因為目前cpu位址匯流排為34條,條,定址範圍2^10* 2^10* 2^10* 2^4=16g),而32bit只支援4g記憶體(有32位匯流排)

2、64位cpu一次可提取64位資料,比32位提高了一倍,理論上效能會提公升1倍。但這是建立在64bit作業系統,64bit軟體的基礎上的。

什麼是64位處理器?

之所以叫做「64位處理器」,是因為電腦內部都是實行2進製運算,處理器(cpu)一次處理資料的能力也是2的倍數。8位處理器、16位處理器、32位處理器和64位處理器,其計數都是2的倍數。一次處理的資料越大,該電腦處理資訊的能力越來越大;因此64位處理在先天就比32位處理器具有快速的能力。

64位處理器之失

※硬體———缺乏驅動程式,很多現有硬體無法使用

※軟體———作業系統不是問題,但是軟體出現不相容難題

64位處理器之得

※硬體———更快的執行速度,更大的記憶體管理

※軟體———最新的尖端軟體首先出現在64位平台

程式執行平台

不同的平台上對不同資料型別分配的位元組數是不同的。

個人對平台的理解是cpu+os+compiler,是因為:

1、64位機器也可以裝32位系統(x64裝xp);

2、32位機器上可以有16/32位的編譯器(xp上有tc是16位的,其他常見的是32位的);

3、即使是32位的編譯器也可以弄出64位的integer來(int64)。

以上這些是基於常見的wintel平台,加上我們可能很少機會接觸的其它平台(其它的cpu和os),所以個人認為所謂平台的概念是三者的組合。

雖然三者的長度可以不一樣,但顯然相互配合(即長度相等,32位的cpu+32位的os+32位的compiler)發揮的能量最大。

理論上來講 我覺得資料型別的位元組數應該是由cpu決定的,但是實際上主要由編譯器決定(佔多少位由編譯器在編譯期間說了算)。

常用資料型別對應位元組數

可用如sizeof(char),sizeof(char*)等得出

32位編譯器:

char :1個位元組

char*(即指標變數,只與位址定址範圍有關): 4個位元組(32位的定址空間是2^32, 即32個bit,也就是4個位元組。同理64位編譯器)

short int : 2個位元組

int: 4個位元組

unsigned int : 4個位元組

float: 4個位元組

double: 8個位元組

long: 4個位元組

long long: 8個位元組

unsigned long: 4個位元組

64位編譯器:

char :1個位元組

char*(即指標變數): 8個位元組

short int : 2個位元組

int: 4個位元組

unsigned int : 4個位元組

float: 4個位元組

double: 8個位元組

long: 8個位元組

long long: 8個位元組

unsigned long: 8個位元組

為記憶體優化,一般採用位元組對齊。

位元組對齊就是變數儲存的位址是變數的有效位元組對齊值的整數倍,即:

address%最終有效位元組對齊值 = 0;

變數位元組對齊值

1) 變數的自身位元組對齊值

簡單型別變數

對於char型資料,其自身對齊值為1,對於short型為2,對於int,float,double型別,其自身對齊值為4,單位位元組。

結構型別或聯合型別:

自身位元組對齊值的大小是其成員中最大基本型別要求的有效位元組對齊值

2) 編譯器要求的位元組對齊值:

編譯器設定要求的位元組對齊值

3) 最終有效的位元組對齊值:

在自身位元組對齊值和編譯器要求的位元組對齊值中取較小的。

其實位元組對齊的細節和具體編譯器實現相關,但一般而言,滿足三個準則:

1) 結構體變數的首位址能夠被其最寬基本型別成員的大小所整除。

2) 結構體每個成員相對於結構體首位址的偏移量都是成員大小或者成員的子成員大小(只要該成員有子成員,比如說是陣列,結構體等)的整數倍,如有需要編譯器會在成員之間加上填充位元組;例如上面第二個結構體變數的位址空間。

3) 結構體的總大小為結構體最寬基本型別成員大小的整數倍,如有需要編譯器會在最末乙個成員之後加上填充位元組。

ag.1

typedef

struct bb

bb;typedef

struct aa

aa;int main()

ag.2

typedef

union date;

struct data too;

date max;

printf("%d\n",sizeof(too)); //結果為24

共同體中有成員型別 int,所以位元組對齊值為4,忽略陣列的大小,若為double,位元組對齊值為8。

32位和64位系統區別及int位元組數

一 64位系統和32位有什麼區別?1 64bit cpu擁有更大的定址能力,最大支援到16gb記憶體,而32bit只支援4g記憶體 2 64位cpu一次可提取64位資料,比32位提高了一倍,理論上效能會提公升1倍。但這是建立在64bit作業系統,64bit軟體的基礎上的。什麼是64位處理器?之所以叫...

32位和64位系統區別及int位元組數

url 一 64位系統和32位有什麼區別?1 64bit cpu擁有更大的定址能力,最大支援到16gb記憶體,而32bit只支援4g記憶體 2 64位cpu一次可提取64位資料,比32位提高了一倍,理論上效能會提公升1倍。但這是建立在64bit作業系統,64bit軟體的基礎上的。什麼是64位處理器?...

32位和64位系統區別及int位元組數

一 64位系統和32位有什麼區別?1 64bit cpu擁有更大的定址能力,最大支援到16gb記憶體,而32bit只支援4g記憶體 2 64位cpu一次可提取64位資料,比32位提高了一倍,理論上效能會提公升1倍。但這是建立在64bit作業系統,64bit軟體的基礎上的。什麼是64位處理器?之所以叫...