[程式C] 記憶體對齊單位

#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