有变量
struct{ char type; int num; char name[10]; }rec;
char是1字节,int是4字节,若按4字节对齐,那么sizeof(rec)等于()
A. 15 B. 16 C. 18 D. 20
在C语言中,结构体(struct)的内存布局会受到编译器对齐规则的影响。对齐规则是为了提高内存访问效率而设定的,它要求结构体中的成员在内存中的地址是某个特定值(通常是2、4、8等)的倍数。 在这个问题中,我们有一个结构体rec,包含以下成员: • char type;// 1字节 • int num;// 4字节 • char name[10];// 10字节 并且题目指定了“按4字节对齐”。这意味着结构体中的每个成员,以及结构体整体的大小,都应该是4的倍数(或者成员本身大小小于4字节的,则按其自身大小对齐,但结构体整体大小仍需满足最大对齐要求)。 现在我们来分析结构体的内存布局: 1. char type;占1字节,地址从0开始。 2. 接下来是int num;。由于type只占了1字节,而num需要4字节对齐,所以num之前的内存会有3字节的填充(padding),使得num的地址从4开始。 3. int num;占4字节,地址从4到7。 4. 最后是char name[10];。由于num之后的地址是8(已经是4的倍数),name可以直接从这里开始,不需要额外的填充。name占10字节,地址从8到17。 至此,我们已经计算了结构体中所有成员占用的空间(包括填充),总共是1(type)+ 3(padding)+ 4(num)+ 10(name)= 18字节。 但是,我们还需要考虑结构体整体的对齐要求。由于结构体中最大的成员是int类型,其大小为4字节,所以结构体整体的大小也应该是4的倍数。目前计算出来的大小是18字节,不是4的倍数,因此编译器会在结构体末尾添加2字节的填充(padding),使得结构体整体大小变为20字节。 所以,sizeof(rec)的结果是20字节,选项D是正确的。
每一个类型都要与4对齐
为撒
D
题目解析: struc...
用户登录可进行刷题及查看答案
题目解析: struct { char type; ===>占一个字节 int num; ===>占四个字节,但考虑字节对齐,int num不会紧跟着type,对齐的最终结果是char type和int num共占8字节 char name[10]; ===>虽然数组个数是10个,占10个字节,但考虑字节对齐,最后回对齐到12字节,所以该结构体总占字节为8+12 = 20 } rec;
登录后提交答案