各變數位元組數

2021-07-27 18:04:41 字數 1589 閱讀 7175

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 ; 不佔記憶體。

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

32位和64位各變數位元組數

資料型別編譯配置 x86x64 char 1字元1字元 short 2字元2字元 int4字元 4字元long 4字元4字元 longlong 8字元8字元 float 4字元4字元 double 8字元8字元 long double 8字元8字元 wchar t 2字元2字元 bool 1字元1字...

int float寫入位元組資料各位元組序的實現

int與位元組陣列轉換比較簡單,用變數位與oxff等和移位即可實現,因為變數位與0xff等已經不受計算機cpu大小端序的影響,可直接實現,如 define byte0 littleend val static cast val 0xff define byte1 littleend val stat...

unity AssetBundle位元組陣列加密

1.加密 對assetbundle的位元組陣列每位進行與key的異或處理 相同為0,不同為1 using system using system.collections.generic using system.io using system.linq using system.text names...