MST

星途 面试题库

面试题:C++ 中union节省内存原理及应用

请简述C++中union节省内存的原理。假设有一个包含int、float和char数组的union,给出它的定义并说明在32位和64位系统下占用内存大小分别是多少,为什么?
47.1万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试

1. union节省内存的原理

在C++中,union 允许不同的数据类型共享同一块内存空间。它只有一个成员会处于活动状态,也就是说在任何时刻,只有一个成员的值是有效的。这样,union 分配的内存大小仅为其最大成员所需的内存大小,而不是所有成员大小之和,从而达到节省内存的目的。

2. union定义

union MyUnion {
    int intValue;
    float floatValue;
    char charArray[5];
};

3. 32位系统下占用内存大小及原因

  • 大小:在32位系统下,int 通常为4字节,float 也是4字节,char[5] 为5字节。由于 union 分配内存大小是其最大成员的大小,所以 MyUnion 在32位系统下占用5字节。
  • 原因union 以最大成员所需内存来分配空间,charArray[5] 是这里最大的成员,需要5字节,因此整个 union 占用5字节。

4. 64位系统下占用内存大小及原因

  • 大小:在64位系统下,int 通常仍为4字节,float 为4字节,char[5] 为5字节。同样,MyUnion 在64位系统下占用5字节。
  • 原因:原理与32位系统相同,union 按照最大成员 charArray[5] 的大小5字节来分配内存空间。