MST

星途 面试题库

面试题:C语言结构体嵌套与对齐

定义如下结构体嵌套: ```c struct Inner { char x; double y; }; struct Outer { struct Inner inner; int z; char w; }; ``` 计算`struct Outer`的大小,并阐述在嵌套结构体场景下对齐规则是如何生效的。
13.7万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
  1. 计算struct Outer的大小

    • 首先分析struct Inner的大小:
      • char x占1字节。
      • double y占8字节。由于结构体对齐规则,char x会补齐到8字节(double类型要求8字节对齐),所以struct Inner大小为8 + 8 = 16字节。
    • 然后看struct Outer
      • struct Inner inner占16字节。
      • int z占4字节。
      • char w占1字节。int zchar w会补齐到8字节(因为struct Outer整体按double的8字节对齐,struct Inner已经是8字节对齐的,所以struct Outer后续成员也要按8字节对齐)。
      • 所以struct Inner大小为16 + 8 = 24字节。
  2. 嵌套结构体场景下对齐规则生效方式

    • 结构体成员对齐:每个结构体成员的偏移量必须是该成员类型大小的整数倍。例如在struct Inner中,char x占1字节,但为了满足double y的8字节对齐要求,x后会填充7字节。
    • 结构体整体对齐:结构体的大小必须是其最大成员类型大小的整数倍。对于struct Outer,其最大成员类型是double(8字节),所以struct Outer的大小是8的整数倍。即使int zchar w加起来不足8字节,也要补齐到8字节,以满足整体对齐要求。

所以struct Outer的大小为24字节。