#pragma pack(1) 用來表示記憶體對齊單位
1 表示以 BYTE 作 align
4 表示以 DWORD 作 align
() 裡可選擇的是 1,2,4,16
#pragma pack 會要求compiler 使用特別的對齊方式來包裝 Structure Member . 大多數的compilers, 當你宣告一個結構時, 將會在彼此成元之間插入 padding 來確保他們在記憶體中的對齊。
範例程式:
#pragma pack(1)
typedef struct _TEST_PACK_1 {
char AAA;
short BBB;
__int32 CCC;
} TEST_PACK_1;
#pragma pack()
#pragma pack(2)
typedef struct _TEST_PACK_2 {
char AAA;
char BBB;
__int32 CCC;
} TEST_PACK_2;
#pragma pack()
#pragma pack(4)
typedef struct _TEST_PACK_4 {
char AAA;
char BBB;
__int32 CCC;
} TEST_PACK_4;
#pragma pack()
#pragma pack(16)
typedef struct _TEST_PACK_H {
char AAA;
short BBB;
__int32 CCC;
__int32 CCC;
} TEST_PACK_H;
#pragma pack()
typedef struct _TEST_PACK_F {
char AAA;
short BBB;
__int32 CCC;
} TEST_PACK_F;
printf("sizeof char %X \n", sizeof(char));
printf("sizeof short %X \n", sizeof(short));
printf("sizeof __int32 %X \n", sizeof(__int32));
printf("sizeof TEST_PACK_1 %X \n", sizeof(TEST_PACK_1));
printf("sizeof TEST_PACK_2 %X \n", sizeof(TEST_PACK_2));
printf("sizeof TEST_PACK_4 %X \n", sizeof(TEST_PACK_4));
printf("sizeof TEST_PACK_H %X \n", sizeof(TEST_PACK_H));
printf("sizeof TEST_PACK_F %X \n", sizeof(TEST_PACK_F));
輸出結果:
sizeof char 1
sizeof short 2
sizeof __int32 4
sizeof TEST_PACK_1 7
sizeof TEST_PACK_2 6
sizeof TEST_PACK_4 8
sizeof TEST_PACK_H C
sizeof TEST_PACK_F 8