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位效能就會大打折扣。第三,運算速...