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