MST

星途 面试题库

面试题:C++ 中 struct 和 union 内存分配差异

在C++中,给定以下代码片段: ```cpp struct S { int a; char b; double c; }; union U { int a; char b; double c; }; ``` 请分别计算 `sizeof(S)` 和 `sizeof(U)` 的值,并解释为什么会得到这样的结果。
36.0万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 计算sizeof(S)的值及原因
    • sizeof(S)的值:假设int占4字节,char占1字节,double占8字节,并且结构体存在内存对齐。结构体S的成员按顺序排列,int a占4字节,char b占1字节,为了满足double c的8字节对齐要求,char b后面需要填充3字节,double c占8字节。所以sizeof(S) = 4 + 1 + 3 + 8 = 16字节。
  2. 计算sizeof(U)的值及原因
    • sizeof(U)的值:联合体U中所有成员共享同一块内存空间,其大小取决于占用内存最大的成员。在union U中,double c占用8字节,所以sizeof(U) = 8字节。