821考研计组边界对齐

一个结构体中不同类型数据的顺序与结构体存放占用的字节数有关

结构体所占空间与其内部元素的类型有关,而且与不同类型元素的排列有关。

char==》1

int===》4

long===》4

double===》8

test1----->4+4(1+1+1+对齐1)

test2----->4(1+对齐3)+4+4(1+1+对齐2)

sizeof(X)----->32

sizeof(X)----->24

struct X
{
    char a;
    int b;
    double c;
};

struct Y
{
    char a;
    X b;
};



sizeof(X)===16sizeof(Y)===24

计算Y的存储长度时,在存放第二个元素b时的初始位置是在double型的长度8的整数倍处,而非16的整数倍处,即系统为b所分配的存储空间是第8~23个字节。

如果将Y的两个元素char型的a和X型的b调换定义顺序,则系统为b分配的存储位置是第0~15个字节,为a分配的是第16个字节,加起来一共17个字节,不是最长基本类型double所占宽度8的整数倍,因此要补齐到8的整数倍,即24。

(个人感觉考察概率不大)

Built with LogoFlowershow