一道内存对齐问题产生的疑惑
代码片段如下:程序代码:
#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,请问是教材上那个内存对齐的规则错了,
还是我理解有误呢,谢谢大家!