Win64, 也就是X64編譯配置下:
char 1字節;
short 2字節;
int 4字節;
long 4字節;
long long 8字節;
float 4字節;
double 8字節;
long double 8字節;
wchar_t 2字節;
bool 1字節;
(指針都是8字節)
char* 8字節;
bool* 8字節;
short* 8字節;
int* 8字節;
long* 8字節;
long long* 8字節;
float* 8字節;
double* 8字節;
long double* 8字節;
wchar_t* 8字節;
下面是Win32, 也就是X86編譯配置下變量所占字節數
char 1字節;
short 2字節;
int 4字節;
long 4字節;
longlong 8字節;
float 4字節;
double 8字節;
long double 8字節;
wchar_t 2字節;
bool 1字節;
(指針都是4字節)
char* 4字節;
bool* 4字節;
short* 4字節;
int* 4字節;
long* 4字節;
long long* 4字節;
float* 4字節;
double* 4字節;
long double* 4字節;
wchar_t* 4字節;
其他類型:
enum類型聲明不占內存。
eg. enum Color { Red, Black }; 不占內存。
enum變量定義占int型內存。Win32下是占4B。
eg. Color clr; 占sizeof(int)struct的成員對齊問題:
對於結構體,編譯器會自動進行成員對齊以提高運算效率。缺省情況下,編譯器會為結構體的每個成員按其自然對界(按結構體中的成員中size最大的成員對齊)條件分配空間,每個成員按照他們被聲明的順序在內存中順序存儲。
聯合體(union)的結構體空間要足夠大,要等於最長的一個結構體 變量的空間,但是這個最長的空間要滿足以下條件:
1.要大於等於最長一個結構變量的空間
2.並且要能夠整除其他結構變量的數據長度(長度要是元類型長度的最小公倍數)。
總結:經上述比較,一般變量在X86和X64系統下長度沒什么區別,區別在於指針的 尋址范圍從32位增加到了64位。如果考慮對64位系統下程序的兼容性,指針是唯一需要注意的地方。從32位系統過渡到64位系統不同於從16位系統過渡 到32位系統,因為DOS系統下int只有2個字節,而Windows系統下int是4個字節,過渡到64位系統后int的字節數沒有增加。如果使用 Windows系統編程,支持64位需要Visual Studio 2005/2008均可,而早期版本是不支持64位平台的。