struct _THUNDER { int iVersion; char cTag; char cAdv; int iUser; char cEnd; } Nowcoder; int sz = sizeof(Nowcoder);
则执行后,变量sz的值将得到
|----------int----------|
|char|char|char|char|
所以在编程的时候也要注意,最好把相同类型的放一起,这样能节省空间,该题中的两个int如果放一起写,总容量应该就是12了
你起码给个编译器默认对齐字节数是多少呀???1还是2还是4还是8还是16呀????
如果是1的话,答案是11
如果是2的话,答案是12
如果是4、8、16的话,答案是16
【解析】内存对齐的规则:
1.第一个成员必须是从0位置开始偏移
2.后面的成员从成员的大小和对齐模数相比取小的整数倍的的地方(对齐模数默认是 8)
3.最后要对结构体整体进行对齐:成员中最大的那一个和对齐模数相比取小的整数倍
这里结构体具体的每个成员所在位置:
int iVersion; 0 ~ 3
char cTag; 4 ~ 4
char cAdv; 5 ~ 5
int iUser; 8 ~ 11
char cEnd; 12 ~ 12
更多C++基础专业知识讲解,点击链接即可查看
https://www.nowcoder.com/link/zxyl-cpp12