各變量字節數


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位平台的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM