面试题答案
一键面试-
计算
sizeof(test)
的值:- 在32位系统下,编译器默认4字节对齐。
char a
:占1字节。由于按4字节对齐,它后面会填充3字节,达到4字节对齐。int b
:占4字节,本身就是4字节对齐,无需额外填充。short c
:占2字节,为了满足4字节对齐,它后面会填充2字节。- 所以
sizeof(test)
= 4(char a
及填充) + 4(int b
) + 4(short c
及填充) = 12字节。
-
内存对齐过程:
- 对于结构体中的第一个成员
char a
,它本身占1字节,但为了满足4字节对齐的要求,编译器会在a
后面填充3字节,使其占用空间达到4字节。 - 第二个成员
int b
,int
类型在32位系统下占4字节,正好是4字节对齐,不需要额外填充,直接紧跟在a
及其填充字节之后。 - 第三个成员
short c
,short
类型占2字节,为了使整个结构体满足4字节对齐,在c
后面会填充2字节,这样整个结构体占用的空间就是12字节,以满足4字节对齐的要求。
- 对于结构体中的第一个成员
所以sizeof(test)
的值为12字节。