各变量字节数
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位平臺的。
轉載于:https://www.cnblogs.com/junglefish/p/5464100.html
總結
- 上一篇: 关于ubuntu 14.04 dpkg
- 下一篇: java配置JDK