在64位與32位系統下不同型別區別

2021-08-21 06:13:31 字數 2465 閱讀 2719

32位64位下各種資料型別大小的對比 

1.基本資料型別大小的對比 

關於資料型別的大小,總是記不住,這裡也算有個記錄,順便看一下32位和64位之間的差別: 

我寫了一小段測試**:

// c++test.cpp : 定義控制台應用程式的入口點。  

//

#include "stdafx.h"

#include #include using namespace std;

//main

int _tmain(int argc, _tchar* argv)

看一下結果: 

win32下: 

sizeof(char):1 

sizeof(short):2 

sizeof(int):4 

sizeof(long):4 

sizeof(long long):8 

sizeof(unsigned int):4 

sizeof(float):4 

sizeof(double):8 

sizeof(pointer):4 

請按任意鍵繼續. . . 

x64下: 

sizeof(char):1 

sizeof(short):2 

sizeof(int):4 

sizeof(long):4 

sizeof(long long):8 

sizeof(unsigned int):4 

sizeof(float):4 

sizeof(double):8 

sizeof(pointer):8

32位和64位系統在windows下基本資料型別的大小都是一樣的。只有指標的大小不一樣!32位指標大小為4byte,而64位的指標大小為8byte。

注:linux下,long型是64位的,這一點是和windows不同的地方。

2.為什麼windowsx64下long也為4byte? 

我們知道,正常標準的話,long應該也是64位即8byte。但是在windows下,我們的結果卻是4byte。為什麼會這樣呢?這裡引用msdn的一段關於x64下的解釋:

簡單解釋一下: 

我們程式設計時很少關注資料型別真正的大小,畢竟即使不關注這個也可以程式設計,而且我們習慣了win32,到64位下,只有指標因為定址需要是必須變成64位的,64位的指標定址範圍是0~2^64-1,而其他的資料型別基本已經夠用,如果把所有資料型別變成64位,明顯是浪費空間。再者,為了讓32位和64位程式相容執行,能少修改還是少修改,所以windows僅將指標大小進行了修改。這樣,程式可以相容執行。

3.指標的大小 

我們看看指標到底有多大?指向不同型別物件的指標大小是不是會有不同?看乙個小例子:

// c++test.cpp : 定義控制台應用程式的入口點。  

//

#include "stdafx.h"

#include #include using namespace std;

class test

; //乙個函式指標

typedef void(*pfunc)(void);

void printhello(void)

//main

int _tmain(int argc, _tchar* argv)

結果: 

win32下: 

sizeof(pint):4 

sizeof(pvoid):4 

sizeof(ptest):4 

sizeof(pfunc):4 

請按任意鍵繼續. . . 

x64下: 

sizeof(pint):8 

sizeof(pvoid):8 

sizeof(ptest):8 

sizeof(pfunc):8 

請按任意鍵繼續. . . 

可見,不管指標指向張三李四還是王二麻子,都是一樣大的。能夠影響指標大小的,還是位數。32位下指標大小為4,64位下指標的大小為8.

4.string的大小 

關於string的大小,我們寫一小段**測試一下:

// c++test.cpp : 定義控制台應用程式的入口點。  

//

#include "stdafx.h"

#include #include using namespace std;

//main

int _tmain(int argc, _tchar* argv)

結果: 

win32下: 

28 28 

28 28 

請按任意鍵繼續. . . 

x64下: 

32 32 

32 32 

請按任意鍵繼續. . .

64位和32位編譯環境下不同資料型別長度的區別

關於64位和32位編譯環境下不同資料型別長度有以下幾條規則 1 char 型別一般是 8bit 但ansi c 裡沒有硬性規定其長度,某些嵌入式編譯器可能是 16bit 2 short 和long 型別的長度不相同 3 int 型別通常同具體機器的物理字長相同 4 short 通常是16bits,i...

64位與32位作業系統的不同

乙個電腦處理資料是有規定的格式的。32位的電腦存放資料的形式是對每個資料用32個二進位制位元組來存放。64位的意思就是用64位個二進位制位元組來存放。64位作業系統的資料寬度為64位,64位指令集可以執行64位資料指令,也就是說處理器一次可提取64位資料 只要兩個指令,一次提取8個位元組的資料 比3...

32位系統與64位系統的區別

64位作業系統只能安裝在64位電腦上 cpu必須是64位的 同時需要安裝64位常用軟體以發揮64位 x64 的最佳效能。32位作業系統則可以安裝在32位 32位cpu 或64位 64位cpu 電腦上。當然,32位作業系統安裝在64位電腦上,其硬體恰似 大馬拉小車 64位效能就會大打折扣。第三,運算速...