Here is a snippet:
#pragma pack(4)
struct s1
{
char a;
long b;
};
#pragma pack()
#pragma pack(2)
struct s2
{
char c;
struct s1 st1;
};
#pragma pack()
#pragma pack(2)
struct s3
{
char a;
long b;
};
#pragma pack()
#pragma pack(4)
struct s4
{
char c;
struct s3 st3;
};
#pragma pack()
I though sizeof(s4) should be 10 or 12. But it turns out to be 8.
I am using Visual C++ 6.0. Could someone tell me why?
So the packing alignment of
s3is 2, and its size is 1 (alignment 1) + 1 (padding) + 4 (alignment 2) = 6.The packing alignment of
s4is 4, and its size is 1 (alignment 1) + 1 (padding) + 6 (alignment 2) = 8.Note that
#pragma packdoesn’t “extra-align” anything with looser alignment requirements. It only reduces alignment, i.e. controls “packing” alignment.