MST

星途 面试题库

面试题:C语言结构体与联合体之内存分配

假设有如下C语言结构体定义: ```c struct { char a; int b; short c; } myStruct; ``` 以及联合体定义: ```c union { char a; int b; short c; } myUnion; ``` 分别计算 `myStruct` 和 `myUnion` 的大小,并解释原因。(假设在32位系统下,且默认对齐方式)
42.6万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
  1. myStruct 的大小
    • 在32位系统默认对齐方式下,char 类型占1字节,int 类型占4字节,short 类型占2字节。
    • 结构体的对齐原则是每个成员按其自身大小的整数倍对齐,并且结构体的总大小为最大成员大小的整数倍。
    • myStructchar a 占1字节,由于 int b 占4字节,a 后面要填充3字节以满足 b 按4字节对齐。b 占4字节,short c 占2字节,c 后面要填充2字节以满足结构体总大小是4字节(最大成员 int 的大小)的整数倍。
    • 所以 myStruct 的大小为 1 + 3 + 4 + 2 + 2 = 12 字节。
  2. myUnion 的大小
    • 联合体的大小是其最大成员的大小。
    • myUnion 中,int b 是最大成员,占4字节。
    • 所以 myUnion 的大小为4字节。

总结:

  • myStruct 的大小为12字节,原因是结构体对齐规则。
  • myUnion 的大小为4字节,原因是联合体取最大成员大小。