MST

星途 面试题库

面试题:C++中,空类的sizeof值为何通常是1?对内存布局有何影响

在C++中,定义一个空类`class Empty {};`,请解释为什么`sizeof(Empty)`的值通常是1,而不是0,并且阐述这个1字节的大小在内存布局方面有怎样的体现和影响。
37.8万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 为什么sizeof(Empty)的值通常是1而不是0
    • 在C++中,每个对象都必须有一个独一无二的地址。如果sizeof(Empty)为0,那么当创建多个Empty类型的对象时,它们将具有相同的内存地址(因为没有占用任何空间),这违反了C++对象必须有唯一地址的原则。所以,编译器会为Empty类分配至少1个字节的空间,以确保不同对象具有不同的地址。
  2. 1字节大小在内存布局方面的体现和影响
    • 体现:当定义Empty类的对象时,每个对象会占用1个字节的内存空间。例如,Empty obj1; Empty obj2;obj1obj2在内存中分别占据1个字节的空间,它们的地址是不同的。
    • 影响
      • 空间占用:从空间角度看,虽然单个Empty对象仅占用1个字节,但如果有大量的Empty对象,也会消耗一定的内存。
      • 继承和组合:在继承和组合场景下,当Empty类作为基类或成员类时,它的1字节空间也会参与到整体的内存布局中。例如,class Derived : public Empty { int a; };Derived类对象的内存布局中,Empty基类部分占用1字节,int成员a占用4字节(假设int为4字节),整个Derived对象占用的空间通常是1 + 4 = 5字节(这里不考虑字节对齐,实际情况可能因字节对齐规则而不同)。