#include <stdio.h>
struct Student1
{
// 1、申请空间的对齐规则,最大的整数倍
// 2、与最大的成员对齐
short s;//先申请2个字节
char b;//申请1个字节
char c;//再申请一个1字节
// 结构如下(每个方括号表示一个字节):
// [s][s]
// [b][c]
};
struct Student2
{
short s;//先申请2个字节,剩余空着
double b;//申请8个字节
char c;//再申请1个字节,剩余空着
// 结构如下(每个方括号表示一个字节):
// [s][s][][][][][][]
// [b][b][b][b][b][b][b][b]
// [c][][][][][][][]
// 这样申请浪费很多空间,大小为24个字节
};
struct Student3
{
double b;//申请8个字节
short s;//申请2个字节
char c;//再申请1个字节,剩余空着
// 结构如下(每个方括号表示一个字节):
// [b][b][b][b][b][b][b][b]
// [s][s][c][][][][][]
// 这样申请浪费很多空间
};
int main() {
printf("Student1's size: %ld\n",sizeof(struct Student1));
printf("Student2's size: %ld\n",sizeof(struct Student2));
printf("Student3's size: %ld\n",sizeof(struct Student3));
return 0;
}
C:\test\ctest.exe
Student's size: 4
Student2's size: 24
Student3's size: 16
Process finished with exit code 0