一道内存对齐问题产生的疑惑
代码片段如下:
程序代码:#include <stdio.h>
#pragma pack(4)
struct S1
{
short a;
long b;
};
struct S2
{
char c;
struct S1 d;
double e;
};
#pragma pack()
int main()
{
struct S2 s2;
printf("%d\n", sizeof(struct S2));
return 0;
}我的理解是:
1、内存对齐有一个重要的规则就是,最终结构体的大小应该是各个成员的整数倍,但是此代码段结果却是20,很
显然它并不是double e(8字节)的整数倍,但是程序运行结果却实是20,请问是教材上那个内存对齐的规则错了,
还是我理解有误呢,谢谢大家!








