MST

星途 面试题库

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

请描述C语言中结构体和联合体在内存分配方式上有什么不同?假设有如下结构体和联合体定义: ```c struct { int a; char b; short c; } myStruct; union { int a; char b; short c; } myUnion; ``` 在32位系统下,分别计算`myStruct`和`myUnion`占用的内存大小,并说明原因。
26.0万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
  1. 结构体和联合体内存分配方式的不同
    • 结构体:结构体中的每个成员都有自己独立的内存空间,内存大小是所有成员大小之和,并且为了满足内存对齐规则,可能会在成员之间填充一些额外的字节。
    • 联合体:联合体的所有成员共享同一块内存空间,内存大小是其最大成员的大小,以满足最大成员的存储需求。
  2. 计算myStructmyUnion占用的内存大小及原因
    • myStruct
      • 在32位系统下,int通常占4字节,char占1字节,short占2字节。
      • 由于内存对齐规则,假设结构体的起始地址为0。int a从地址0开始,占用4字节(0 - 3)。char b占1字节,为了满足short c的2字节对齐要求,在char b后填充3字节,char b实际占用地址4,填充后到地址7。short c从地址8开始,占用2字节(8 - 9)。
      • 所以myStruct占用的内存大小为4 + 1 + 3 + 2 = 8字节。
    • myUnion
      • 联合体中int占4字节,char占1字节,short占2字节。
      • 因为联合体所有成员共享同一块内存空间,其大小取最大成员的大小,这里最大成员是int,占4字节。
      • 所以myUnion占用的内存大小为4字节。