MST

星途 面试题库

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

考虑以下C语言结构体定义: ```c struct Inner { short a; char b; }; struct Outer { struct Inner inner; int c; char d; }; ``` 在64位系统中,`char`按1字节对齐,`short`按2字节对齐,`int`按4字节对齐。计算`Outer`结构体的大小,并详细解释结构体嵌套时对齐规则是如何应用的。
17.6万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
  1. 计算Outer结构体的大小
    • 首先看struct Inner
      • short a占2字节,按2字节对齐。
      • char b占1字节,因为short按2字节对齐,char会补齐到2字节边界,所以struct Inner大小为4字节。
    • 接着看struct Outer
      • struct Inner inner大小为4字节。
      • int c占4字节,按4字节对齐,它从4字节边界开始存储,这里刚好满足对齐要求。
      • char d占1字节,int按4字节对齐,char会补齐到4字节边界,所以struct Outer大小为4 + 4 + 4 = 12字节。
  2. 结构体嵌套时对齐规则
    • 结构体成员按照定义顺序存储。
    • 每个成员的偏移量(相对于结构体起始地址的距离)必须是其自身对齐字节数的倍数。如果当前位置不满足对齐要求,编译器会在成员之间插入填充字节。
    • 结构体的总大小必须是其最大对齐成员对齐字节数的倍数。在struct Outer中,最大对齐成员是int,对齐字节数为4,12是4的倍数,满足该规则。

所以,struct Outer的大小是12字节。