陈斌彬的技术博客

Stay foolish,stay hungry

C语言 - 结构体存储与空间分配

1.结构体存储对齐

结构体占用的空间为结构体成员中,占字节最大的数据成员的空间的整数倍

比如:

struct student{
char sex;
int score;
};

最大长度为整型占用4个字节的空间,所以其占用的空间为4的倍数,这样 s占用的空间就是 8个字节。

如果是这样一个结构体

struct student{
char sex;
double score;
};

占用的大小就是8的倍数,为16个字节;

2.数据成员的书写顺序也会影响结构体占用的空间的大小:

struct student{
char sex;
int score;
char subject;
};

占用的是4x3为12个字节,内存结构为先为sex分配一个字节的空间,然后执行对齐操作,下一个int型变量在下一个四字节的空间,然后,后面的subject为了对齐还占用4个字节的空间。

struct student{
char sex;
char subject;
int score;
};

占用的是2X4为8个字节的空间,因为前两个字符连续存放在了四字节的空间的前两个里面。为了执行对齐,空了两个字符的空间,下一个int型的变量存放在下一个四字节的空间中。

总结:

因为struct结构体的存储顺序会影响空间的使用率,所以以后应该尽量将相同数据类型的变量连续写。