MST

星途 面试题库

面试题:C语言中嵌套结构体的内存对齐问题

假设有如下嵌套结构体定义: ```c struct Inner { char a; int b; }; struct Outer { struct Inner inner; short c; }; ``` 请分析`struct Outer`的内存布局,并计算其大小,说明内存对齐的规则在这个嵌套结构体中是如何应用的。
16.2万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
  1. 内存布局分析
    • struct Inner中,char a占1字节,int b占4字节。由于内存对齐规则,char a后会填充3字节,使得struct Inner的大小为8字节(以int的4字节对齐,1 + 3 + 4 = 8)。
    • struct Outer中,包含struct Inner,其大小为8字节,然后是short c占2字节。因为struct Outer整体也要按照最大成员类型(这里是int,4字节对齐),short c后不需要填充,struct Outer的大小为10字节(8 + 2 = 10)。
  2. 内存对齐规则应用
    • 结构体成员对齐:结构体的每个成员相对于结构体首地址的偏移量(offset)必须是该成员大小的整数倍。在struct Inner中,a占1字节,偏移量为0,满足1字节对齐;b占4字节,所以a后要填充3字节,使得b的偏移量为4,满足4字节对齐。
    • 结构体整体对齐:结构体的大小必须是其最大成员类型大小的整数倍。在struct Outer中,最大成员类型是int(4字节),struct Inner大小为8字节,short c占2字节,总大小为10字节,满足4字节对齐(10是4的2倍多2字节,但已满足整体对齐要求)。
  3. 计算struct Outer大小
    • struct Outer的大小为10字节。

总结:struct Outer内存布局为struct Inner(8字节)在前,short c(2字节)在后,整体大小为10字节,内存对齐规则按上述方式应用。