#pragma pack(n) 指定的 n。min(自身對齊值, 指定對齊值)。#pragma pack(2)#pragma pack(2)
struct C { char b; int a; short c; };
#pragma pack()
// sizeof(C) = 8
// b@0, a@2(對齊2), c@6, 結構體對齊2, 總長8
若改為 pack(4),a 對齊 4,位移 4,總長 12。
#pragma pack(8)#pragma pack(8)
struct S1 { char a; long b; }; // sizeof=8 (b對齊4)
struct S2 { char c; struct S1 d; long long e; };
#pragma pack()
// S2 佈局:c@0, d@4(對齊4), e@16(對齊8, 需填充4字節), 總長24
// 差:char, int, char → 12 bytes
// 好:char, char, int → 8 bytes
struct A {
char a;
char reserved[3]; // 明確對齊到 4 字節邊界
int b;
};
unsigned int i = 0x12345678;
unsigned short *p = (unsigned short*)((char*)&i + 1); // 奇數位址
*p = 0; // x86 降速,MIPS/Sparc 崩潰
pack 設定(預設通常 8 或 4)。__attribute__((packed)) 或手動處理)。static 成員不佔結構體大小。