C语言字节对齐求解??

#include

#pragma pack(8)
struct TestStruct4
{
char a;
long b;
};
struct TestStruct5
{
char c;
struct TestStruct4 d;
long long e;
};

#pragma pack()

void main()
{
struct TestStruct4 f;
struct TestStruct5 j;
printf("%d\n", sizeof(f));
printf("%d\n", sizeof(j));
}

看了一本书上这个程序的运算结果是8、24,我自己感觉也是8、24,在ubuntu下运行了一下,结果是8、20,难道是编译器的问题??求大侠解释一下

要看一下不同平台的缺省字节对其长度,可能不一样。

是按照不同的系统导致,32位和64位就差了4个字节某些数据类型