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...