C语言中结构体对齐

c语言中结构体会发生对齐,这点大多数人都清楚,其目的是为了让cpu存取数据更快,但是为了提高存取的速度制定的规则是怎么样的?一直没找到靠谱的解释,网上给的多种说法,总感觉有些牵强,有特别懂的同志烦请留言赐教。

通过程序的实际运行大致得出如下结论:

1、较短长度的字节会补齐到4个字节(见例1);

2、如果多个连续较短字节,总长度未超过4字节,会补齐到4字节(见例2);

3、单个变量大于4字节但不是4的倍数的,会补齐到4的倍数(见例3);

//例1
struct S 
{
    int a;
    char b;
};

//例2
struct S2
{
    char x1;
    short x2;
    float x3;
    char x4;
};

//例3
struct S3
{
    char a[10];
    int b;
};

int iSize1 = sizeof(struct S);
int iSize2 = sizeof(struct S2);
int iSize3 = sizeof(struct S3);

上述结果:

iSize1 = 8

iSize2 = 12

iSize3 = 16


猜你喜欢

转载自blog.csdn.net/heibao111728/article/details/80799871