以 struct A1 來說,最大為 double 所以 alignment 的單位為 8 bytes,
sizeof( struct A1) 就會是 4 + 4 + 8 + 8 = 24 bytes。
sizeof( struct A2) 就會是 4 + 4 + 8 + 1 + p(7) + 8 = 32 bytes,
padding 了 7 bytes。
struct A1
{
int a;
char b[12];
double c;
};
struct A2
{
int a;
char b[13];
double c;
};
使用虛擬指令 #pragma pack(n) : 編譯器將按照 n bytes 對齊。使用虛擬指令 #pragma pack() : 取消自定義對齊方式。
#pragma pack(2)
struct D
{
int a;
char b;
};
#pragma pack()
如果指定的 n 大於 structure 中成員的最大 size 將不起作用,仍依 size 最大的成員進行對齊。sizeof( struct D) 就會是 4 + 1 + p(1) = 6 bytes。
沒有留言:
張貼留言