面试常考题。示例:

1
2
3
4
5
6
7
8
9
10
typedef struct _A
{
char a;
int b;
float c;
double d;
int *pa;
char *pc;
short e;
}A;

第一步,计算出结构体所有类型的所占大小。

1
2
3
4
5
6
7
8
9
10
typedef struct _A
{
char a;//1
int b;//4
float c;//4
double d;//8
int *pa;//4
char *pc;//4
short e;//2
}A;

第二步,选出最大值(上例中为8),作为对齐位
第三步,按照顺序,依次模拟内存堆放

1
char a;//1

■□□□□□□□

1
2
char a;//1
int b;//4

■■■■■□□□

1
2
3
char a;//1
int b;//4
float c;//4

■■■■■□□□
■■■■□□□□

1
2
3
4
char a;//1
int b;//4
float c;//4
double d;//8

■■■■■□□□
■■■■□□□□
■■■■■■■■

1
2
3
4
5
char a;//1
int b;//4
float c;//4
double d;//8
int *pa;//4

■■■■■□□□
■■■■□□□□
■■■■■■■■
■■■■□□□□

1
2
3
4
5
6
char a;//1
int b;//4
float c;//4
double d;//8
int *pa;//4
char *pc;//4

■■■■■□□□
■■■■□□□□
■■■■■■■■
■■■■■■■■

1
2
3
4
5
6
7
char a;//1
int b;//4
float c;//4
double d;//8
int *pa;//4
char *pc;//4
short e;//2

■■■■■□□□
■■■■□□□□
■■■■■■■■
■■■■■■■■
■■□□□□□□

综上,一共占用40字节。