#include <stdio.h>
// 默认对齐的结构体
struct AlignedStruct {
char a; // 1 字节
int b; // 4 字节(对齐要求 4)
double c; // 8 字节(对齐要求 8)
};
// 紧凑对齐(取消填充)
#pragma pack(push, 1)
struct PackedStruct {
char a;
int b;
double c;
};
#pragma pack(pop)
int main() {
struct AlignedStruct s1;
struct PackedStruct s2;
printf("Addresses:\n");
printf("s1: %p\ns1.a: %p\ns1.b: %p\ns1.c: %p\n",
&s1, &s1.a, &s1.b, &s1.c);
printf("s2: %p\ns2.a: %p\ns2.b: %p\ns2.c: %p\n",
&s2, &s2.a, &s2.b, &s2.c);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgovLyDpu5jorqTlr7npvZDnmoTnu5PmnoTkvZMKc3RydWN0IEFsaWduZWRTdHJ1Y3QgewogICAgY2hhciBhOyAgICAgIC8vIDEg5a2X6IqCCiAgICBpbnQgYjsgICAgICAgLy8gNCDlrZfoioLvvIjlr7npvZDopoHmsYIgNO+8iQogICAgZG91YmxlIGM7ICAgIC8vIDgg5a2X6IqC77yI5a+56b2Q6KaB5rGCIDjvvIkKfTsKCi8vIOe0p+WHkeWvuem9kO+8iOWPlua2iOWhq+WFhe+8iQojcHJhZ21hIHBhY2socHVzaCwgMSkKc3RydWN0IFBhY2tlZFN0cnVjdCB7CiAgICBjaGFyIGE7CiAgICBpbnQgYjsKICAgIGRvdWJsZSBjOwp9OwojcHJhZ21hIHBhY2socG9wKQoKaW50IG1haW4oKSB7CiAgICBzdHJ1Y3QgQWxpZ25lZFN0cnVjdCBzMTsKICAgIHN0cnVjdCBQYWNrZWRTdHJ1Y3QgczI7CiAgICBwcmludGYoIkFkZHJlc3NlczpcbiIpOwogICAgcHJpbnRmKCJzMTogJXBcbnMxLmE6ICVwXG5zMS5iOiAlcFxuczEuYzogJXBcbiIsIAogICAgICAgICAgICZzMSwgJnMxLmEsICZzMS5iLCAmczEuYyk7CiAgICBwcmludGYoInMyOiAlcFxuczIuYTogJXBcbnMyLmI6ICVwXG5zMi5jOiAlcFxuIiwgCiAgICAgICAgICAgJnMyLCAmczIuYSwgJnMyLmIsICZzMi5jKTsKICAgIHJldHVybiAwOwp9