问一个关于对齐的有关问题

问一个关于对齐的问题#includestdio.h#pragma pack(1)struct struct5{long long4char char1}st5#prag

问一个关于对齐的问题
#include<stdio.h>
#pragma pack(1)

struct struct5
{
long long4;
char char1;
}st5;

#pragma pack(8)

struct structx
{
struct struct5 x;
char y;
}stx;

main()
{
printf("5size is %d.\n", sizeof(str5));
printf("xsize is %d.\n", sizeof(strx));
}

上面这段代码运行结果为
5size is 5.
xsize is 6.

我想问一下,为什么对齐值已经重新设为8了,结构体strx的大小还是只有6而不是取4(long型的长度)的倍数8呢?
[解决办法]
#pragma pack(1)

struct struct5
{
long long4;
char char1;
}st5;

单纯从内存 可以看成是 
struct struct5
{
char long[4];
char char1;
}

那么 下面的 
struct structx
{
struct struct5 x;
char y;
}stx;
其实是 
struct structx
{
char x[5]
char y;
}stx;
[解决办法]
#pragma pack(n)设定以n字节对齐方式。

内置类型:
第一、如果n大于等于该变量类型默认的对齐字节数,那么取默认的对齐字节数。
第二、如果n小于该变量的类型默认对齐字节数,那么该类型的对齐字节数为n。

结构体:
结构的对齐字节数为所有成员的中最大的对齐字节数,结构体占用字节数必须为对齐字节数的整数倍。

数组:
数组的对齐字节数为其元素类型的对齐字节数,占用空间为元素占用空间*数组长度

pack(1)作用范围包含struct5。
struct5的对齐为1,占用空间为5。

pack(8)作用范围包含structx。不包含struct5。
structx的对齐为1,占用空间为6。

[解决办法]

引用:
意思是说因为前面有#pragma pack(1)了,所以str5就被当作是5个char型,即使后面#pragma pack(8)了,还是当成这样处理了?
后面的 #pragma pack(8)只对
struct structx
{
struct struct5 x;
char y;
}stx;
有作用