測試環境:win 7 64bits,vmware workstation 12 pro,ubuntu 15.10 64bits,使用gcc version 5.2.1 20151010
# include
#pragma pack(1) //14,11,11
//#pragma pack(2) //16,12,12
//#pragma pack(4) //16,12,12
//#pragma pack(8) //16,16,16
struct test1
;struct test2
;struct test3
;int main(int argc, char **argv)
union tagaaaa
half;
int li;
}number;
struct tagbbbb
half;
struct tagcccc
half;
int li;
};// 在位元組對齊為1下,sizeof(union tagaaaa)、sizeof(struct tagbbbb)、sizeof(struct tagcccc)是4,6,8
// 在位元組對齊為2下,sizeof(union tagaaaa)、sizeof(struct tagbbbb)、sizeof(struct tagcccc)是6,8,10
//在位元組對齊為4下,sizeof(union tagaaaa)、sizeof(struct tagbbbb)、sizeof(struct tagcccc)是8,8,12
//下述結構共佔3位元組
struct _record_struct
* env_alarm_record ;
//下述結構共佔4位元組
struct _record_struct1
;//下述結構共佔2位元組
struct _record_struct2
;//下述結構共佔4位元組
struct _record_struct3
;
//以下程式在小端序的情況下輸出的結果是 01 26 00 00
//超過位數按照截斷處理,注意是16進製制輸出
#pragma pack(4)/*四位元組對齊*/
int main(int argc, char* argv)
*pstpimdata;
pstpimdata = (struct tagpim *)puc;
memset(puc, 0, 4);
pstpimdata->ucpim1 = 1;
pstpimdata->ucdata0 = 2;
pstpimdata->ucdata1 = 3;
pstpimdata->ucdata2 = 4;
printf("%02x %02x %02x %02x\n", puc[0], puc[1], puc[2], puc[3]);
return0;}
#pragma pack()/*恢復預設對齊方式*/
struct*p;
//1位元組對齊情況下
p = 0x100000;
p + 0x1 = 0x100018
//18 = 24(10)
(unsigned
long)p + 0x1 = 0x100001
(unsigned
long *)p + 0x1 = 0x100004
(char *)p + 0x1 = 0x100001
ulong atm_uni_getparaulongvalbyoid(uchar *
type );
ulong atm_uni_mapiptable_deletehandler (void
* pmsgrcv, void
** ppmsgsnd)
//在小端位元組序下列印輸出的值是多少? 45678912
//在大端位元組序下列印輸出的值是多少? 126789ab
# include
# include
union bits8_tag
byte;//1個8 bits
}value;
union bytes8_tag
byte1;//4個8 bits
}value1;
int main(int argc, char **argv)
//output
1,40,0,0,0,0
1,1,0,0,0
0,0,0,0,0
1,1,0,0,0
0,0,0,0,0
64,0,0,0,1 //2^6
0,0,0,0,0
16777216,0,0,0,1 //2^24
struct trap
;//則轉換成小端序為:
struct trap
;
位域位元組對齊
使用位域的主要目的是壓縮儲存,其大致規則為 1 如果相鄰位域字段的型別相同,且其位寬之和小於型別的sizeof大小,則後面的字段將緊鄰前乙個字段儲存,直到不能容納為止 2 如果相鄰位域字段的型別相同,但其位寬之和大於型別的sizeof大小,則後面的字段將從新的儲存單元開始,其偏移量為其型別大小的整數...
位元組序與位元組對齊
一.網路位元組序與主機位元組序 1.大端和小端儲存 大端 big endian 高位存低位址。符合人類的正常思維。網路位元組序採用大端 網路傳輸的是位元組流 小端 littile endian 低位存低位址。如果將乙個32位的整數0x12345678存放到乙個整型變數 int 中,這個整型變數採用大...
Linux 位元組序與位元組對齊優化
1.位元組序跟linux windows無關,是由cpu構架決定 同乙個cpu不管裝的是windows 或 linux 位元組序都是一樣的 2.位元組對齊 linux 全用 attribute packed 作用於結構體,類似於pragma packet 1 使用方法如下 typdef struct...