MST

星途 面试题库

面试题:C++中结构体与联合体在内存分配上的区别

请详细阐述C++中结构体与联合体在内存分配方式上有何不同?并举例说明如何计算它们各自的内存大小。
12.3万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试

内存分配方式不同点

  1. 结构体(struct):结构体的内存分配是按照成员变量声明的顺序依次分配内存,成员变量之间紧密排列,可能会存在内存对齐。结构体的总大小是所有成员变量大小之和,再加上由于内存对齐引入的额外字节。
  2. 联合体(union):联合体所有成员共享同一块内存空间,其内存大小取决于最大成员变量的大小。联合体的总大小是最大成员变量大小向上取到内存对齐边界的大小。

计算内存大小示例

  1. 结构体示例
struct ExampleStruct {
    char a; // 1字节
    int b;  // 4字节
    short c; // 2字节
};

在常见的32位或64位系统中,由于内存对齐,char类型后会填充3个字节,使int从4字节对齐地址开始存储。short后也可能填充2个字节。所以ExampleStruct的大小为1 + 3 + 4 + 2 + 2 = 12字节。 2. 联合体示例

union ExampleUnion {
    char a; // 1字节
    int b;  // 4字节
    short c; // 2字节
};

ExampleUnion的大小取决于最大成员int,由于内存对齐,int本身就满足对齐要求,所以ExampleUnion大小为4字节。